日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
手把手教你用Python給小姐姐美個(gè)顏

 01 圖像的顏色空間

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),宛城網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:宛城等地區(qū)。宛城做網(wǎng)站價(jià)格咨詢:18982081108

彩色圖像比灰度圖像擁有更豐富的信息,它的每個(gè)像素通常是由紅(R)、綠(G)、藍(lán)(B)3個(gè)分量來表示的,每個(gè)分量介于0~255之間。

圖像中呈現(xiàn)的不同的顏色都是由R、G、B這3種顏色混合而成的。在OpenCV里面,彩色圖像擁有3個(gè)顏色通道,但是通道的順序是可以變換的,RGB、BRG、BGR、GBR、GRB都有可能。

在讀取一幅圖像的時(shí)候,我們對(duì)于圖像的顏色通道排布并不清楚,因此需要先把圖像的顏色通道固定下來,這就需要調(diào)用OpenCV的cvtColor()函數(shù)。

cvtColor()函數(shù)的功能是對(duì)圖像進(jìn)行顏色空間變換,原型如下:

 
 
 
  1. dst=cv2.cvtColor(src, code ) 

參數(shù)說明:

  • src:輸入圖像即要進(jìn)行顏色空間變換的原圖像,可以是Mat類。
  • code:轉(zhuǎn)換的代碼或標(biāo)識(shí),即在此確定將什么制式的圖片轉(zhuǎn)換成什么制式的圖片,后面會(huì)詳細(xì)講述。

函數(shù)輸出進(jìn)行顏色空間變換后存儲(chǔ)圖像。

通過調(diào)用cvtColor()函數(shù),還可以將一幅彩色圖像轉(zhuǎn)換成灰度圖像,示例代碼見程序3-5,代碼運(yùn)行效果如圖3.9所示。

▲彩色圖像1.jpg

  • 程序3-5 彩色圖像轉(zhuǎn)灰度圖像示例:color2gray.py
 
 
 
  1. # -*- coding: UTF-8 -*- 
  2. import numpy as np 
  3. import cv2 
  4. #定義main()函數(shù) 
  5. def main(): 
  6.    img = cv2.imread('1.jpg') 
  7.    img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY) 
  8.                                           #從彩色圖像轉(zhuǎn)化成灰度圖像 
  9.    cv2.imshow('img2.bmp ', img2) 
  10.    cv2.waitKey(0) 
  11. if __name__ == '__main__': 
  12.    main() 

 

▲圖3.9 color2gray.py程序運(yùn)行結(jié)果

注意:cvtColor()函數(shù)還可以通過改變參數(shù)cv2.COLOR_RGB2BRG等改變圖像顏色通道的排列順序。另外也可以直接在讀取圖像函數(shù)imread時(shí)設(shè)置參數(shù)為0,直接將彩色圖像讀取為灰度圖像,img = cv2.imread('1.jpg',0)。

02 彩色圖像的通道分離和混合

灰度圖像是單通道的,彩色圖像擁有R、G、B三個(gè)顏色通道。因此在圖像處理時(shí),經(jīng)常把顏色通道分離,單獨(dú)處理一個(gè)通道的數(shù)組,然后再合并成一幅彩色圖像。

在實(shí)際的代碼編寫中,只需要調(diào)用OpenCV中的split()和merge()函數(shù)就可以實(shí)現(xiàn)圖像的通道分離和合并。

split()函數(shù)的功能是將多通道的矩陣分離成單通道矩陣,原型如下:

 
 
 
  1. [,mv]=cv2.split (src) 

參數(shù)說明:輸入?yún)?shù)為要進(jìn)行分離的圖像矩陣,輸出參數(shù)為一個(gè)Mat數(shù)組。

merge()函數(shù)的功能是將多個(gè)單通道圖像合成一幅多通道圖像,原型如下:

 
 
 
  1. dst=cv2.merge([,dst] ) 

參數(shù)說明:輸入?yún)?shù)可以是Mat數(shù)組,輸出為合并后的圖像矩陣。

03 彩色圖像的通道分離和混合程序示例

輸入一幅彩色圖像,通過程序3-6將其分割成R、G、B這3個(gè)通道的圖像并顯示。在分割前需要先確定圖像的顏色通道分布,因此先調(diào)用cvtColor()函數(shù)固定顏色通道。示例代碼參見程序3-6,效果如圖3.10所示。

  • 程序3-6 彩色圖像通道分離示例:colorsplit.py
 
 
 
  1. # -*- coding: UTF-8 -*- 
  2. import numpy as np 
  3. import cv2 
  4. #定義main()函數(shù) 
  5. def main(): 
  6.    img = cv2.imread('1.jpg')     
  7.    img2 = cv2.cvtColor(img,cv2.COLOR_BRG2RGB) 
  8.    r,g,b = cv2.split(img2)   #img分離成三個(gè)單通道的圖像 
  9.    cv2.imshow("Red", r) 
  10.    cv2.imshow("Green", g) 
  11.    cv2.imshow("Blue", b) 
  12.    cv2.waitKey(0) 
  13. if __name__ == '__main__': 
  14.    main()  

▲圖3.10 colorsplit.py程序運(yùn)行結(jié)果

可以看出,在圖像通道分離后,不同顏色通道的圖像顯示深淺不一,單通道的圖像呈現(xiàn)該顏色通道的灰度信息。接下來把這3個(gè)顏色通道混合一下,在代碼中加入一行代碼:img3 = cv2.merge([b,g,r]);,這樣img3又回到了原來輸入的彩色圖像樣式,顯示效果如圖3.11所示。

▲圖3.11 圖像三通道混合后的輸出

04 彩色圖像的二值化

圖像的二值化是將圖像上的像素點(diǎn)的灰度值設(shè)置為0或255,也就是將整個(gè)圖像呈現(xiàn)出明顯的黑白效果。彩色圖像二值化最簡(jiǎn)單的步驟如下:

  1. 彩色圖像轉(zhuǎn)灰度。
  2. 圖像閾值化處理,即像素值高于某閾值的像素賦值為255,反之為0。

其中,閾值的操作會(huì)調(diào)用OpenCV的threshold()函數(shù)。

threshold()函數(shù)聲明如下:

 
 
 
  1. ret, dst = cv2.threshold(src, thresh, maxval, type); 

函數(shù)功能:實(shí)現(xiàn)圖像固定閾值的二值化。

參數(shù)說明:

  • src:輸入圖,只能輸入單通道圖像,通常來說為灰度圖。
  • dst:輸出圖。
  • thresh:閾值。
  • maxval:當(dāng)像素值超過了閾值(或者小于閾值,根據(jù)type來決定)時(shí)所賦予的值。
  • type:二值化操作的類型,包含5種類型,即cv2.THRESH_BINARY、cv2.THRESH_BINARY_INV、cv2.THRESH_TRUNC、cv2.THRESH_TOZERO和cv2.THRESH_TOZERO_INV。

舉例參考程序3-7。

  • 程序3-7 彩色圖像二值化示例:colorthreshold.py
 
 
 
  1. # -*- coding: UTF-8 -*- 
  2. import numpy as np 
  3. import cv2 
  4. #定義main()函數(shù) 
  5. def main(): 
  6.    img = cv2.imread('1.jpg',0) 
  7.    thresh1,dst =cv2.threshold(img,127,255,cv2.THRESH_BINARY) 
  8.                                                #圖像二值化 
  9.    cv2.imshow("dst", dst) 
  10.    cv2.waitKey(0) 
  11. if __name__ == '__main__': 
  12.    main() 

如程序3-7所示,高于127的像素全部置為255,低于的全部置為0,得到如圖3.12所示的輸出結(jié)果。

▲圖3.12 colorthreshold.py程序輸出結(jié)果

05 彩色圖像的遍歷

灰度圖像的遍歷按照訪問二維數(shù)組的方式得到坐標(biāo)位置的像素。那對(duì)于彩色圖像呢?彩色圖像可以看出是3維數(shù)組,遍歷方式參見程序3-8。

  • 程序3-8 遍歷彩色圖像示例:color1.py
 
 
 
  1. # -*- coding: UTF-8 -*- 
  2. import numpy as np 
  3. import cv2 
  4. #定義main()函數(shù) 
  5. def main(): 
  6.    img = cv2.imread('1.jpg')     
  7.    height,width,n = img.shape #得到圖片的寬高和維度 
  8.    img2 = img.copy()  #復(fù)制一個(gè)跟img相同的新圖片 
  9.    #寬高兩個(gè)維度遍歷圖片 
  10.    for i in range(height): 
  11.       for j in range(width): 
  12.          img2[i, j][0] = 0 #將第一個(gè)通道內(nèi)的元素重新賦值 
  13.    cv2.imshow('img2.jpg', img2) 
  14.    cv2.waitKey(0) 
  15. if __name__ == '__main__': 
  16.    main() 

由于第一個(gè)通道里面的顏色信息全部變?yōu)榱?,圖像顯示結(jié)果如圖3.13所示。

▲圖3.13 color1.py程序運(yùn)行結(jié)果

在讀取不同通道的圖像像素值時(shí),需要先確定圖像的通道排列是RGB還是BRG。

06 彩色圖像和灰度圖像的轉(zhuǎn)換

經(jīng)過前面的學(xué)習(xí),我們知道彩色圖像轉(zhuǎn)成灰度圖像有3種路徑:

  • imread讀取圖像的時(shí)候直接設(shè)置參數(shù)為0,彩色圖像自動(dòng)被讀成灰度圖像。
  • 調(diào)用cvtColor()函數(shù),參數(shù)設(shè)置為cv2.COLOR_BGR2GRAY。
  • 調(diào)用split()函數(shù),可以將一幅彩色圖像分離成3個(gè)單通道的灰度圖像。

那么灰度圖像有沒有可能轉(zhuǎn)換成彩色圖像呢?

我們知道灰度圖像是單通道的,彩色圖像是RGB 3這個(gè)顏色通道。那么是否可以人為地增加圖像的通道,偽造出另外兩個(gè)通道,而另外兩個(gè)通道可以隨機(jī)地賦值呢?程序3-9做出了嘗試。

  • 程序3-9 增加圖像通道示例:gray2color1.py
 
 
 
  1. # -*- coding: UTF-8 -*- 
  2. import numpy as np 
  3. import cv2 
  4. #定義main()函數(shù) 
  5. def main(): 
  6.    img = cv2.imread('gray1.jpg')     
  7.    gray = np.zeros((512, 512, 3), np.uint8)  # 生成一個(gè)空彩色圖像 
  8.    height,width,n = img.shape 
  9.    #圖像像素級(jí)遍歷 
  10.    for i in range(height): 
  11.       for j in range(width): 
  12.          gray[i, j][0] = img[i, j][0] 
  13.          gray[i, j][1] = 0 
  14.          gray[i, j][2] = 0 
  15.    cv2.imshow('gray.jpg', gray) 
  16.    cv2.waitKey(0) 
  17. =if __name__ == '__main__': 
  18.    main() 

上述程序新建了一個(gè)3通道的空的彩色圖像,然后將讀取的灰度圖像放在新建的彩色圖像的第一個(gè)通道,也就是B通道,其他兩個(gè)通道賦值0,所以圖像整體呈現(xiàn)藍(lán)色,程序運(yùn)行結(jié)果如圖3.14所示。

▲圖3.14 gray2color1.py程序運(yùn)行結(jié)果

上述方法轉(zhuǎn)換的圖像顏色很單一。有沒有更加智能的方法呢?在攝像技術(shù)不是很成熟的時(shí)期,人們給拍攝出來的黑白照片上色,發(fā)明了一種偽彩色圖像技術(shù)。在OpenCV里面,可以用預(yù)定義好的Colormap(色度圖)來給圖片上色,示例代碼參見程序3-10。

  • 程序3-10 偽彩色圖像技術(shù)示例:gray2color2.py
 
 
 
  1. # -*- coding: UTF-8 -*- 
  2. import numpy as np 
  3. import cv2 
  4. #定義main()函數(shù) 
  5. def main(): 
  6.    img = cv2.imread('gray1.jpg')     
  7.    im_color = cv2.applyColorMap(img, cv2.COLORMAP_JET)  #色度圖上色 
  8.    cv2.imshow("im_color.jpg", im_color) 
  9.    cv2.waitKey(0) 
  10. if __name__ == '__main__': 
  11.    main() 

程序運(yùn)行結(jié)果如圖3.15所示。偽彩色圖像目前主要應(yīng)用在對(duì)高度、壓力、密度、濕度等描述上,彩色數(shù)據(jù)可視化。

▲圖3.15 gray2color程序運(yùn)行結(jié)果


名稱欄目:手把手教你用Python給小姐姐美個(gè)顏
本文URL:http://www.dlmjj.cn/article/dpggeid.html