中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用Python給小姐姐美個顏

發布時間:2021-10-28 16:13:49 來源:億速云 閱讀:120 作者:柒染 欄目:編程語言

如何用Python給小姐姐美個顏,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

 01 圖像的顏色空間

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

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

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

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

dst=cv2.cvtColor(src, code )

參數說明:

  • src:輸入圖像即要進行顏色空間變換的原圖像,可以是Mat類。

  • code:轉換的代碼或標識,即在此確定將什么制式的圖片轉換成什么制式的圖片,后面會詳細講述。

函數輸出進行顏色空間變換后存儲圖像。

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

如何用Python給小姐姐美個顏

▲彩色圖像1.jpg

  • 程序3-5 彩色圖像轉灰度圖像示例:color2gray.py

# -*- coding: UTF-8 -*- import numpy as np import cv2 #定義main()函數 def main():    img = cv2.imread('1.jpg')    img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)                                           #從彩色圖像轉化成灰度圖像    cv2.imshow('img2.bmp ', img2)    cv2.waitKey(0) if __name__ == '__main__':    main()
如何用Python給小姐姐美個顏

▲圖3.9 color2gray.py程序運行結果

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

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

灰度圖像是單通道的,彩色圖像擁有R、G、B三個顏色通道。因此在圖像處理時,經常把顏色通道分離,單獨處理一個通道的數組,然后再合并成一幅彩色圖像。

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

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

[,mv]=cv2.split (src)

參數說明:輸入參數為要進行分離的圖像矩陣,輸出參數為一個Mat數組。

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

dst=cv2.merge([,dst] )

參數說明:輸入參數可以是Mat數組,輸出為合并后的圖像矩陣。

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

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

  • 程序3-6 彩色圖像通道分離示例:colorsplit.py

# -*- coding: UTF-8 -*- import numpy as np import cv2 #定義main()函數 def main():    img = cv2.imread('1.jpg')        img2 = cv2.cvtColor(img,cv2.COLOR_BRG2RGB)    r,g,b = cv2.split(img2)   #img分離成三個單通道的圖像    cv2.imshow("Red", r)    cv2.imshow("Green", g)    cv2.imshow("Blue", b)    cv2.waitKey(0) if __name__ == '__main__':    main()

如何用Python給小姐姐美個顏

▲圖3.10 colorsplit.py程序運行結果

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

如何用Python給小姐姐美個顏

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

04 彩色圖像的二值化

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

  1. 鴻蒙官方戰略合作共建——HarmonyOS技術社區

  2. 彩色圖像轉灰度。

  3. 圖像閾值化處理,即像素值高于某閾值的像素賦值為255,反之為0。

其中,閾值的操作會調用OpenCV的threshold()函數。

threshold()函數聲明如下:

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

函數功能:實現圖像固定閾值的二值化。

參數說明:

  • src:輸入圖,只能輸入單通道圖像,通常來說為灰度圖。

  • dst:輸出圖。

  • thresh:閾值。

  • maxval:當像素值超過了閾值(或者小于閾值,根據type來決定)時所賦予的值。

  • 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

# -*- coding: UTF-8 -*- import numpy as np import cv2 #定義main()函數 def main():    img = cv2.imread('1.jpg',0)    thresh2,dst =cv2.threshold(img,127,255,cv2.THRESH_BINARY)                                                #圖像二值化    cv2.imshow("dst", dst)    cv2.waitKey(0) if __name__ == '__main__':    main()

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

 如何用Python給小姐姐美個顏

▲圖3.12 colorthreshold.py程序輸出結果

05 彩色圖像的遍歷

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

  • 程序3-8 遍歷彩色圖像示例:color1.py

# -*- coding: UTF-8 -*- import numpy as np import cv2 #定義main()函數 def main():    img = cv2.imread('1.jpg')        height,width,n = img.shape #得到圖片的寬高和維度    img2 = img.copy()  #復制一個跟img相同的新圖片    #寬高兩個維度遍歷圖片    for i in range(height):       for j in range(width):          img2[i, j][0] = 0 #將第一個通道內的元素重新賦值    cv2.imshow('img2.jpg', img2)    cv2.waitKey(0) if __name__ == '__main__':    main()

由于第一個通道里面的顏色信息全部變為了0,圖像顯示結果如圖3.13所示。

如何用Python給小姐姐美個顏

▲圖3.13 color1.py程序運行結果

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

06 彩色圖像和灰度圖像的轉換

經過前面的學習,我們知道彩色圖像轉成灰度圖像有3種路徑:

  • imread讀取圖像的時候直接設置參數為0,彩色圖像自動被讀成灰度圖像。

  • 調用cvtColor()函數,參數設置為cv2.COLOR_BGR2GRAY。

  • 調用split()函數,可以將一幅彩色圖像分離成3個單通道的灰度圖像。

那么灰度圖像有沒有可能轉換成彩色圖像呢?

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

  • 程序3-9 增加圖像通道示例:gray2color1.py

# -*- coding: UTF-8 -*- import numpy as np import cv2 #定義main()函數 def main():    img = cv2.imread('gray1.jpg')        gray = np.zeros((512, 512, 3), np.uint8)  # 生成一個空彩色圖像    height,width,n = img.shape    #圖像像素級遍歷    for i in range(height):       for j in range(width):          gray[i, j][0] = img[i, j][0]          gray[i, j][1] = 0          gray[i, j][2] = 0    cv2.imshow('gray.jpg', gray)    cv2.waitKey(0) =if __name__ == '__main__':    main()

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

如何用Python給小姐姐美個顏

▲圖3.14 gray2color1.py程序運行結果

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

  • 程序3-10 偽彩色圖像技術示例:gray2color2.py

# -*- coding: UTF-8 -*- import numpy as np import cv2 #定義main()函數 def main():    img = cv2.imread('gray1.jpg')        im_color = cv2.applyColorMap(img, cv2.COLORMAP_JET)  #色度圖上色    cv2.imshow("im_color.jpg", im_color)    cv2.waitKey(0) if __name__ == '__main__':    main()

程序運行結果如圖3.15所示。偽彩色圖像目前主要應用在對高度、壓力、密度、濕度等描述上,彩色數據可視化。

如何用Python給小姐姐美個顏

▲圖3.15 gray2color程序運行結果

看完上述內容,你們掌握如何用Python給小姐姐美個顏的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白河县| 绩溪县| 澜沧| 库伦旗| 祁阳县| 姚安县| 库车县| 南华县| 盐亭县| 阿拉善盟| 长阳| 葫芦岛市| 乐都县| 平远县| 宁海县| 洛扎县| 公主岭市| 开远市| 平定县| 襄城县| 嘉义市| 桦甸市| 孝义市| 喀喇沁旗| 万载县| 南雄市| 昌都县| 扶绥县| 蒙山县| 修文县| 浙江省| 金寨县| 南汇区| 邯郸县| 榆中县| 黎城县| 工布江达县| 长沙市| 肇源县| 麻栗坡县| 潜山县|