程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【OpenCV-Python-課程(賈)】OpenCV3.3課程筆記:像素處理,像素值的邏輯運算(與、或、非、異或,bitwise)、算術運算(加減乘除),飽和運算(add),遮罩層控制(mask)

編輯:Python

一、像素邏輯運算(and、or、not、xor)

像素邏輯運算,一般用來進行遮罩層控制。

假如我們有一個遮罩層圖像,只想要遮罩圖的白色區域顯示原圖,就可以用到與運算(AND);因為這時候白色區域的像素運算結果取決於原圖,而黑色區域的運算結果一定是黑色。

或運算(OR)能夠得到一個區域上互補性地更加接近上邊界值的圖像,也即局部亮度提升。

非運算(NOT)和被減數是最大像素值時的減法算術運算結果相同,比如NOT 100(十進制,對應的二進制是01100100) = 155(十進制,對應的二進制是 10011011),也就是說100的非值就等於255-100。

非運算(NOT)就是反相操作,白的變成黑的,黑的變成白的。

異或運算(XOR)一般用來判斷兩個圖像是否相同,如果相同最後生成純黑色圖像,如果不同就會有白色塊,並且使用sum()函數把所有元素加起來會發現不為0。

各個運算的API

  • cv2.bitwise_and(src1, src2)
  • cv2.bitwise_or(src1, src2)
  • cv2.bitwise_not(src1, src2)
  • cv2.bitwise_nor(src1, src2)

二、遮罩層控制(bitwise_and和參數mask)

遮罩層控制指用上面提到的與運算API(bitwise_and),設置參數mask,實現只顯示遮罩圖像的透光(白色)區域。

cv.bitwise_and(src, src, mask)

三、像素算術運算(add、subtract、divide、multiply)

像素算術運算,可以改變圖像的亮度(暗度)。

各個運算的API

  • cv2.add(src1, src2, dst, mask, dtype)
  • cv2.subtract(src1, src2, dst, mask, dtype)
  • cv2.multiply(src1, src2, dst, mask, dtype)
  • cv2.divide(src1, src2, dst, mask, dtype)

src1和src2既可以都是單個數值,也可以都是圖像數組,也可以是一個圖像數組搭配一個單個數值,總之只要能滿足Broadcast機制,就允許。

dst在Python語言中,可以省略不寫,因為函數返回值就是dst

mask代表改變的范圍。

注意上面四大API,都是飽和運算;也即如果實際結果數值小於下邊界,就等於下邊界,如果大於上邊界,就等於上邊界。典型的容器類型是CV_8U,下邊界是0,上邊界是255,如果計算結果小於0就返回0,如果計算結果大於255就返回255。

 

四、圖像融合(addweighted)

圖像融合屬於圖像加法運算的特例,圖像加法運算是兩個圖像的權值都為1,而圖像融合是兩圖權值和為1。

add()和addweighted()都是飽和運算。

語法格式如下

cv.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) ->dst

alpha是src1的權重

beta是src2的權重

gamma是結果偏移值


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved