[python opencv 计算机视觉零基础到实战] 六、图像运算
一、學(xué)習(xí)目標(biāo)
如有錯(cuò)誤歡迎指出~
二、了解OpenCV中圖像運(yùn)算的運(yùn)用
目錄
[python opencv 計(jì)算機(jī)視覺(jué)零基礎(chǔ)到實(shí)戰(zhàn)] 一、opencv的helloworld
[【python opencv 計(jì)算機(jī)視覺(jué)零基礎(chǔ)到實(shí)戰(zhàn)】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld
[[python opencv 計(jì)算機(jī)視覺(jué)零基礎(chǔ)到實(shí)戰(zhàn)] 三、numpy與圖像編輯] 一、opencv的helloworld
[[python opencv 計(jì)算機(jī)視覺(jué)零基礎(chǔ)到實(shí)戰(zhàn)] 四、了解色彩空間及其詳解] 一、opencv的helloworld
[[python opencv 計(jì)算機(jī)視覺(jué)零基礎(chǔ)到實(shí)戰(zhàn)] 五、對(duì)象追蹤] 一、opencv的helloworld
推薦
歡迎大家關(guān)注公眾號(hào),公眾號(hào)每滿(mǎn)1024及1024倍數(shù)則會(huì)抽獎(jiǎng)贈(zèng)送機(jī)械鍵盤(pán)一份+IT書(shū)籍2份喲~
2.1 了解圖像間的加法
在opencv中可以使兩張圖片進(jìn)行組合相加,使用add方法。兩張圖片進(jìn)行相加其實(shí)是具體的數(shù)值進(jìn)行運(yùn)算,從而得到結(jié)果。需要注意的是進(jìn)行運(yùn)算的圖片大小必須一致,例如:
以上是我三張圖片的尺寸大小數(shù)據(jù)。每張圖片如下:
1bit:
1bit2:
1bit3:
我們可以先將圖片1bit與圖片1bit3做加法運(yùn)算。opencv提供了add方法給我們對(duì)兩個(gè)圖片做加法運(yùn)算。add方法接收?qǐng)D片作為參數(shù),將會(huì)返回計(jì)算后的圖片結(jié)果。代碼如下:
img=cv2.add(img1,img3)代碼很簡(jiǎn)單,在此不做過(guò)多講解。完整代碼如下:
import cv2img1 = cv2.imread(r'C:\Users\mx\Desktop\1bit.jpg') img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg') cv2.namedWindow("addImage",cv2.WINDOW_NORMAL) img=cv2.add(img1,img3) cv2.imshow("addImage", img) cv2.waitKey (0) cv2.destroyAllWindows()運(yùn)行結(jié)果如下:
從結(jié)果得知,使用add方法運(yùn)算后,結(jié)果為將圖片1bit中的文章覆蓋在了圖片1bit3之上,這是為什么呢?我們可以從數(shù)值上考慮,由于數(shù)值類(lèi)型是uint8,白色的值為255,加再多就到頂了,那么兩個(gè)圖片相加后,白色依舊會(huì)顯示,那么我們的數(shù)值此時(shí)將會(huì)照原樣輸出;黑色區(qū)域則是0,0加上任何數(shù)等于任何數(shù),此時(shí)將會(huì)得到原本掉值,所以黑色加法運(yùn)算后最后顯示的值將會(huì)與另外一張圖片的值一致,并不會(huì)產(chǎn)生其它的結(jié)果。
那我換成圖片1bit2呢?圖片1bit2字體是黑色,值為0,其它區(qū)域?yàn)榘咨珵?55,此時(shí)兩個(gè)圖片進(jìn)行相加的結(jié)果部分同學(xué)可能就很清楚了,白色區(qū)域依舊是白色,黑色可能會(huì)顯示當(dāng)前坐標(biāo)區(qū)域的顏色值。更改代碼:
img2 = cv2.imread(r'C:\Users\mx\Desktop\1bit2.jpg') img=cv2.add(img2,img3)
運(yùn)行結(jié)果如下:
此時(shí)將會(huì)得到一張混有另外一張圖片顏色的字體。其實(shí)在我們平時(shí)處理一些圖片的時(shí)候可以使用這個(gè)攻做成比較好看的文字。
2.2 了解圖像的其它運(yùn)算方法
在opencv中也可以使兩張圖片進(jìn)行組合相減,使用subtract方法,subtract方法與add方法類(lèi)似,接收?qǐng)D片為參數(shù),返回運(yùn)算后的圖片結(jié)果,代碼如下:
import cv2 img2 = cv2.imread(r'C:\Users\mx\Desktop\1bit2.jpg') img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg') cv2.namedWindow("subtractImage",cv2.WINDOW_NORMAL) img=cv2.subtract(img2,img3) cv2.imshow("subtractImage", img) cv2.waitKey (0) cv2.destroyAllWindows()結(jié)果如下:
此時(shí)黑色值為0,已經(jīng)最低了,白色為255,白色值將會(huì)減去原有的色彩值,之后就會(huì)出現(xiàn)如上圖所示的情況。這個(gè)時(shí)候用黑色字體的“我是1_bit”進(jìn)行減法運(yùn)算得到的結(jié)果可以說(shuō)并不是很好看,我們可以使用白色字體的圖片1bit去進(jìn)行相減,更改圖片:
結(jié)果如下:
看來(lái)草率了,應(yīng)該換更好看的底圖,若是底圖好看,我們處理后的文字將會(huì)有別一樣的風(fēng)味。
乘法使用multiply方法,用法一樣,也是通過(guò)圖片的數(shù)值進(jìn)行計(jì)算,由于用法一致不過(guò)多贅述,結(jié)果如下:
除法使用divide,結(jié)果如下:
2.3 了解圖像的均值與方差
圖片之間的像素均值可以得到當(dāng)前圖片的整體色彩偏亮或者偏暗,值越小那么該值就越暗,值越高則反之更亮。均值使用方法mean計(jì)算。mean接收一個(gè)圖片數(shù)據(jù),返回一個(gè)均值結(jié)果?,F(xiàn)在我用前面幾個(gè)小點(diǎn)提到的1bit3圖片作為均值獲取,改圖片是屬于偏亮的圖片,代碼如下:
img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg') print(cv2.mean(img3))結(jié)果如下:
從結(jié)果上很容易看得出,均值所表示的信息是偏亮,是正確的。
接下來(lái)我們使用方法meanStdDev計(jì)算方差。方差在opencv中可以表示該圖片的對(duì)比度,或者說(shuō)該圖片是否從表現(xiàn)上有“意義”。若方差值大則表示差異比較大,若值小,則表示該圖片可能都是一種類(lèi)似顏色,對(duì)比度不高,也就是相對(duì)的模糊。meanStdDev接收?qǐng)D片數(shù)據(jù)為參數(shù),返回一個(gè)均值與一個(gè)方差。代碼如下:
img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg') print(cv2.mean(img3)) print('--------------') print(cv2.meanStdDev(img3))結(jié)果如下:
我們可以從結(jié)果中看到,均值是一致的,那么剩下的就是方差,該方差值沒(méi)有對(duì)照組并不能很好的反應(yīng)出圖片的對(duì)比度。我們更換另外一張圖片:
運(yùn)行結(jié)果如下:
我們可以看到所算出來(lái)的方差值是非常小的。我們?cè)俑鼡Q一張圖查看。
結(jié)果如下:
這張圖的值也是相對(duì)比較小的方差值。
本系列文章首發(fā)于ebaina
三、總結(jié)
總結(jié)
以上是生活随笔為你收集整理的[python opencv 计算机视觉零基础到实战] 六、图像运算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [python opencv 计算机视觉
- 下一篇: [python opencv 计算机视觉