日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

【Opencv实战】简易版“美颜”来啦—再见旧照片,Python一键美颜哦~

發(fā)布時(shí)間:2025/3/21 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Opencv实战】简易版“美颜”来啦—再见旧照片,Python一键美颜哦~ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

🚀 作者 :“程序員梨子”

🚀 **文章簡(jiǎn)介 **:本篇文章主要是寫(xiě)了opencv的多份小程序!

🚀 **文章源碼獲取 **: 為了感謝每一個(gè)關(guān)注我的小可愛(ài)💓每篇文章的項(xiàng)目源碼都是無(wú)償分

享滴💓👇👇👇👇

點(diǎn)這里藍(lán)色這行字體自取,需要什么源碼記得說(shuō)標(biāo)題名字哈!私信我也可!

🚀 歡迎小伙伴們 點(diǎn)贊👍、收藏?、留言💬

正文

在學(xué)習(xí)Opencv的時(shí)候發(fā)現(xiàn)一些有趣的功能,簡(jiǎn)短的代碼實(shí)現(xiàn)的效果還是挺不錯(cuò)滴!

嘻嘻,學(xué)習(xí)完就立馬分享給大家啦!希望大家喜歡!

圖像的顏色空間

彩色圖像比灰度圖像擁有更豐富的信息,它的每個(gè)像素通常是由紅(R)、綠(G)、藍(lán)(B)3個(gè)

分量來(lái)表示的,每個(gè)分量介于0~255之間。

圖像中呈現(xiàn)的不同的顏色都是由R、G、B這3種顏色混合而成的。在OpenCV里面,彩色圖像擁有3

個(gè)顏色通道,但是通道的順序是可以變換的,RGB、BRG、BGR、GBR、GRB都有可能。

在讀取一幅圖像的時(shí)候,我們對(duì)于圖像的顏色通道排布并不清楚,因此需要先把圖像的顏色通道固

定下來(lái),這就需要調(diào)用OpenCV的cvtColor()函數(shù)。

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

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

參數(shù)說(shuō)明:

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

  • code:轉(zhuǎn)換的代碼或標(biāo)識(shí),即在此確定將什么制式的圖片轉(zhuǎn)換成什么制式的圖片,后面會(huì)詳細(xì)講述。

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

通過(guò)調(diào)用cvtColor()函數(shù),還可以將一幅彩色圖像轉(zhuǎn)換成灰度圖像下面會(huì)給大家演示的哈!

  • 程序:彩色圖像轉(zhuǎn)灰度圖像示例

    color2gray.py

#?-*-?coding:?UTF-8?-*-
import?numpy?as?np
import?cv2
#定義main()函數(shù)
def?main():
???img?=?cv2.imread('1.jpg')
???img2?=?cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
??????????????????????????????????????????#從彩色圖像轉(zhuǎn)化成灰度圖像
???cv2.imshow('img2.bmp?',?img2)
???cv2.waitKey(0)
if?__name__?==?'__main__':
???main()

注意:cvtColor()函數(shù)還可以通過(guò)改變參數(shù)cv2.COLOR_RGB2BRG等改變圖像顏色通道的排列順

序。另外也可以直接在讀取圖像函數(shù)imread時(shí)設(shè)置參數(shù)為0,直接將彩色圖像讀取為灰度圖像,

img = cv2.imread('1.jpg',0)。

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

灰度圖像是單通道的,彩色圖像擁有R、G、B三個(gè)顏色通道。因此在圖像處理時(shí),經(jīng)常把顏色通

道分離,單獨(dú)處理一個(gè)通道的數(shù)組,然后再合并成一幅彩色圖像。

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

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

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

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

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

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

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

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

輸入一幅彩色圖像,通過(guò)上面的程序?qū)⑵浞指畛蒖、G、B這3個(gè)通道的圖像并顯示。在分割前需要

先確定圖像的顏色通道分布,因此先調(diào)用cvtColor()函數(shù)固定顏色通道。

  • 程序彩色圖像通道分離示例:

    colorsplit.py

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

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

可以看出,在圖像通道分離后,不同顏色通道的圖像顯示深淺不一,單通道的圖像呈現(xiàn)該顏色通道

的灰度信息。接下來(lái)把這3個(gè)顏色通道混合一下,在代碼中加入一行代碼:img3 =

cv2.merge([b,g,r]);,這樣img3又回到了原來(lái)輸入的彩色圖像樣式,顯示效果如圖3.11所示。

?

4)彩色圖像的二值化

圖像的二值化是將圖像上的像素點(diǎn)的灰度值設(shè)置為0或255,也就是將整個(gè)圖像呈現(xiàn)出明顯的黑白

效果。彩色圖像二值化最簡(jiǎn)單的步驟如下:

  • 彩色圖像轉(zhuǎn)灰度。

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

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

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

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

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

    參數(shù)說(shuō)明:

    • src:輸入圖,只能輸入單通道圖像,通常來(lái)說(shuō)為灰度圖。

    • dst:輸出圖。

    • thresh:閾值。

    • maxval:當(dāng)像素值超過(guò)了閾值(或者小于閾值,根據(jù)type來(lái)決定)時(shí)所賦予的值。

    • type:二值化操作的類型,包含5種類型,即cv2.THRESH_BINARY、cv2.THRESH_BINARY_INV、cv2.THRESH_TRUNC、cv2.THRESH_TOZERO和cv2.THRESH_TOZERO_INV。

    • 程序彩色圖像二值化示例:

      colorthreshold.py

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

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

    ?05 彩色圖像的遍歷

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

    程序遍歷彩色圖像示例:color1.py

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

    由于第一個(gè)通道里面的顏色信息全部變?yōu)榱?:

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

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

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

    經(jīng)過(guò)前面的學(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è)單通道的灰度圖像。

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

    我們知道灰度圖像是單通道的,彩色圖像是RGB 3這個(gè)顏色通道。那么是否可以人為地增加圖像的

    通道,偽造出另外兩個(gè)通道,而另外兩個(gè)通道可以隨機(jī)地賦值呢?

    程序 增加圖像通道示例:

    gray2color1.py

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

    上述程序新建了一個(gè)3通道的空的彩色圖像,然后將讀取的灰度圖像放在新建的彩色圖像的第一個(gè)

    通道,也就是B通道,其他兩個(gè)通道賦值0,所以圖像整體呈現(xiàn)藍(lán)色,程序運(yùn)行結(jié)果:

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

    上述方法轉(zhuǎn)換的圖像顏色很單一。有沒(méi)有更加智能的方法呢?在攝像技術(shù)不是很成熟的時(shí)期,人們

    給拍攝出來(lái)的黑白照片上色,發(fā)明了一種偽彩色圖像技術(shù)。在OpenCV里面,可以用預(yù)定義好的

    Colormap(色度圖)來(lái)給圖片上色。

    • 程序 偽彩色圖像技術(shù)示例:

      gray2color2.py

    #?-*-?coding:?UTF-8?-*- import?numpy?as?np import?cv2 #定義main()函數(shù) 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()

    程序運(yùn)行結(jié)果。偽彩色圖像目前主要應(yīng)用在對(duì)高度、壓力、密度、濕度等描述上,彩

    色數(shù)據(jù)可視化。

    總結(jié)

    關(guān)注小編獲取更多精彩內(nèi)容!記得點(diǎn)擊傳送門哈👇

    記得三連哦! 如需打包好的源碼+素材免費(fèi)分享滴!傳送門

    總結(jié)

    以上是生活随笔為你收集整理的【Opencv实战】简易版“美颜”来啦—再见旧照片,Python一键美颜哦~的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。