首頁>技術>

二、瞭解OpenCV中影象運算的運用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 cv2img2 = 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影象運算是使用影象數值運算

11
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Linux核心設計與實現——核心資料結構