一、學習目標
- 了解opencv中圖像運算的方法
- 了解opencv中圖像運算的運用
如有錯誤歡迎指出~
二、了解OpenCV中圖像運算的運用
目錄
[python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld
[【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld
[[python opencv 計算機視覺零基礎到實戰] 三、numpy與圖像編輯] 一、opencv的helloworld
[[python opencv 計算機視覺零基礎到實戰] 四、了解色彩空間及其詳解] 一、opencv的helloworld
[[python opencv 計算機視覺零基礎到實戰] 五、對象追蹤] 一、opencv的helloworld
推薦
歡迎大家關注公眾號,公眾號每滿1024及1024倍數則會抽獎贈送機械鍵盤一份+IT書籍2份喲~
2.1 了解圖像間的加法
在opencv中可以使兩張圖片進行組合相加,使用add方法。兩張圖片進行相加其實是具體的數值進行運算,從而得到結果。需要注意的是進行運算的圖片大小必須一致,例如:
以上是我三張圖片的尺寸大小數據。每張圖片如下:
1bit:
1bit2:
1bit3:
我們可以先將圖片1bit與圖片1bit3做加法運算。opencv提供了add方法給我們對兩個圖片做加法運算。add方法接收圖片作為參數,將會返回計算后的圖片結果。代碼如下:
img=cv2.add(img1,img3)
代碼很簡單,在此不做過多講解。完整代碼如下:
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()
運行結果如下:
從結果得知,使用add方法運算后,結果為將圖片1bit中的文章覆蓋在了圖片1bit3之上,這是為什么呢?我們可以從數值上考慮,由于數值類型是uint8,白色的值為255,加再多就到頂了,那么兩個圖片相加后,白色依舊會顯示,那么我們的數值此時將會照原樣輸出;黑色區域則是0,0加上任何數等于任何數,此時將會得到原本掉值,所以黑色加法運算后最后顯示的值將會與另外一張圖片的值一致,并不會產生其它的結果。
那我換成圖片1bit2呢?圖片1bit2字體是黑色,值為0,其它區域為白色為255,此時兩個圖片進行相加的結果部分同學可能就很清楚了,白色區域依舊是白色,黑色可能會顯示當前坐標區域的顏色值。更改代碼:
img2 = cv2.imread(r'C:\Users\mx\Desktop\1bit2.jpg')
img=cv2.add(img2,img3)
運行結果如下:
此時將會得到一張混有另外一張圖片顏色的字體。其實在我們平時處理一些圖片的時候可以使用這個攻做成比較好看的文字。
2.2 了解圖像的其它運算方法
在opencv中也可以使兩張圖片進行組合相減,使用subtract方法,subtract方法與add方法類似,接收圖片為參數,返回運算后的圖片結果,代碼如下:
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()
結果如下:
此時黑色值為0,已經最低了,白色為255,白色值將會減去原有的色彩值,之后就會出現如上圖所示的情況。這個時候用黑色字體的“我是1_bit”進行減法運算得到的結果可以說并不是很好看,我們可以使用白色字體的圖片1bit去進行相減,更改圖片:
img=cv2.subtract(img1,img3)
結果如下:
看來草率了,應該換更好看的底圖,若是底圖好看,我們處理后的文字將會有別一樣的風味。
乘法使用multiply方法,用法一樣,也是通過圖片的數值進行計算,由于用法一致不過多贅述,結果如下:
除法使用divide,結果如下:
2.3 了解圖像的均值與方差
圖片之間的像素均值可以得到當前圖片的整體色彩偏亮或者偏暗,值越小那么該值就越暗,值越高則反之更亮。均值使用方法mean計算。mean接收一個圖片數據,返回一個均值結果。現在我用前面幾個小點提到的1bit3圖片作為均值獲取,改圖片是屬于偏亮的圖片,代碼如下:
img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg')
print(cv2.mean(img3))
結果如下:
從結果上很容易看得出,均值所表示的信息是偏亮,是正確的。
接下來我們使用方法meanStdDev計算方差。方差在opencv中可以表示該圖片的對比度,或者說該圖片是否從表現上有“意義”。若方差值大則表示差異比較大,若值小,則表示該圖片可能都是一種類似顏色,對比度不高,也就是相對的模糊。meanStdDev接收圖片數據為參數,返回一個均值與一個方差。代碼如下:
img3 = cv2.imread(r'C:\Users\mx\Desktop\1bit3.jpg')
print(cv2.mean(img3))
print('--------------')
print(cv2.meanStdDev(img3))
結果如下:
我們可以從結果中看到,均值是一致的,那么剩下的就是方差,該方差值沒有對照組并不能很好的反應出圖片的對比度。我們更換另外一張圖片:
運行結果如下:
我們可以看到所算出來的方差值是非常小的。我們再更換一張圖查看。
結果如下:
這張圖的值也是相對比較小的方差值。
本系列文章首發于ebaina
三、總結
- 了解了opencv中圖像加法運算使用add方法
- 了解了opencv中圖像減法運算使用subtract方法
- 了解了opencv中圖像乘法運算使用multiply方法
- 了解了opencv中圖像除法運算使用divide方法
- 了解了opencv中圖像均數運算使用mean方法
- 了解了opencv中圖像方差運算使用meanStdDev方法
- 了解了opencv圖像運算是使用圖像數值運算