OpenCV-Python教程:顏色圖(applyColorMap)[只需幾行代碼生成22種風格各異的彩色圖]


返回OpenCV-Python教程

原文鏈接:http://www.juzicode.com/opencv-note-color-map-applycolormap

在OpenCV中通常使用cvtColor()進行色彩空間的轉換,它可以實現彩色圖像在各種色彩空間里的轉換,也可以用於彩色圖像和灰度圖像之間相互轉換,但是在彩色圖像轉換到灰度圖像后,再用該灰度圖轉換回彩色圖像只是名義上多通道的彩色圖像,人眼看到的卻不是“彩色”了。下面這個例子展示了這個彩轉灰、灰轉彩的過程:

#vx:桔子code / juzicode.com
import cv2
img_src = cv2.imread("nezha.jpg")
img_gray = cv2.cvtColor(img_src,cv2.COLOR_BGR2GRAY)    #彩色轉灰度
print(img_gray.shape)    #單通道
img_color = cv2.cvtColor(img_gray,cv2.COLOR_GRAY2BGR)  #灰度轉彩色
print(img_color.shape)   #3通道
cv2.imshow('img_color',img_color)
cv2.imshow('img_src',img_src)
cv2.waitKey()
cv2.destroyAllWindows()    

上圖中右邊是用cvtColor轉換為灰度圖后再轉回的彩色圖,在這個彩色圖里面我們一點“彩色”的影子都看不到了。

有沒有方法可以讓轉換成后的彩色圖看起來更“彩色”呢?​這里介紹一個功能更強大的接口函數:applyColorMap(),它可以將灰度圖像轉換成彩色圖像,轉換的模式達22種之多,它的接口形式是這樣的:

cv2.applyColorMap(src, colormap[, dst]) ->dst

其中src為輸入圖像,可以是單通道或3通道的8bit圖像。

colormap為顏色圖模式,可以傳入整數0~21對應各種不同的顏色圖,或者用cv2.COLORMAP_AUTUMN(等價於0)、cv2.COLORMAP_BONE(等價於1)等方式傳入,OpenCV源碼頭文件中定義的22種模式如下:

//! GNU Octave/MATLAB equivalent colormaps
enum ColormapTypes
{
    COLORMAP_AUTUMN = 0, //!< ![autumn](pics/colormaps/colorscale_autumn.jpg)
    COLORMAP_BONE = 1, //!< ![bone](pics/colormaps/colorscale_bone.jpg)
    COLORMAP_JET = 2, //!< ![jet](pics/colormaps/colorscale_jet.jpg)
    COLORMAP_WINTER = 3, //!< ![winter](pics/colormaps/colorscale_winter.jpg)
    COLORMAP_RAINBOW = 4, //!< ![rainbow](pics/colormaps/colorscale_rainbow.jpg)
    COLORMAP_OCEAN = 5, //!< ![ocean](pics/colormaps/colorscale_ocean.jpg)
    COLORMAP_SUMMER = 6, //!< ![summer](pics/colormaps/colorscale_summer.jpg)
    COLORMAP_SPRING = 7, //!< ![spring](pics/colormaps/colorscale_spring.jpg)
    COLORMAP_COOL = 8, //!< ![cool](pics/colormaps/colorscale_cool.jpg)
    COLORMAP_HSV = 9, //!< ![HSV](pics/colormaps/colorscale_hsv.jpg)
    COLORMAP_PINK = 10, //!< ![pink](pics/colormaps/colorscale_pink.jpg)
    COLORMAP_HOT = 11, //!< ![hot](pics/colormaps/colorscale_hot.jpg)
    COLORMAP_PARULA = 12, //!< ![parula](pics/colormaps/colorscale_parula.jpg)
    COLORMAP_MAGMA = 13, //!< ![magma](pics/colormaps/colorscale_magma.jpg)
    COLORMAP_INFERNO = 14, //!< ![inferno](pics/colormaps/colorscale_inferno.jpg)
    COLORMAP_PLASMA = 15, //!< ![plasma](pics/colormaps/colorscale_plasma.jpg)
    COLORMAP_VIRIDIS = 16, //!< ![viridis](pics/colormaps/colorscale_viridis.jpg)
    COLORMAP_CIVIDIS = 17, //!< ![cividis](pics/colormaps/colorscale_cividis.jpg)
    COLORMAP_TWILIGHT = 18, //!< ![twilight](pics/colormaps/colorscale_twilight.jpg)
    COLORMAP_TWILIGHT_SHIFTED = 19, //!< ![twilight shifted](pics/colormaps/colorscale_twilight_shifted.jpg)
    COLORMAP_TURBO = 20, //!< ![turbo](pics/colormaps/colorscale_turbo.jpg)
    COLORMAP_DEEPGREEN = 21  //!< ![deepgreen](pics/colormaps/colorscale_deepgreen.jpg)
};

各種ColormapTypes對應的色彩是下圖這樣的,有各種春夏秋冬四季風格、冷熱風格等等:

下面這個例子將本地文件按照灰度圖方式讀入,然后將該灰度圖用22種模式依次轉換后顯示、存儲:

#vx:桔子code / juzicode.com
import cv2 
img_gray = cv2.imread("nezha.jpg",cv2.IMREAD_GRAYSCALE)
for i in range(22):
    dst = cv2.applyColorMap(img_gray,i) 
    cv2.imshow('map',dst) 
    cv2.waitKey(500)
    cv2.imwrite("map-"+str(i)+".jpg",dst)

轉換后的效果是這樣的:

 

這個例子里面我們用來轉換的源圖像是一個灰度圖,實際上我們也可以用彩色圖像作為源圖像,經過桔子菌的測試,用彩色圖和灰度圖轉換出來的效果是一樣的。

擴展閱讀:

  1. OpenCV-Python教程:色彩空間變換
  2. OpenCV-Python教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM