1.基本介紹
??opencv中的影像加法運算就是將兩幅影像或一幅影像與一個標量(標量即單一的數值)進行相加,
??對于兩幅的影像相加,要求相加的影像的大小應該相同,在處理時應該將兩幅影像相同位置的像素的灰度值(灰度影像)或彩色像素各通道值(彩色影像)分別相加,
??對于一幅影像和一個標量相加的情況,則應該將影像所有像素的各通道值分別與標量進行相加,
??目前主要有兩種用途,一種是用于減少甚至消除影像采集中混入的噪聲,原理是影像各點的采集噪聲互不相關且噪聲具有零均值的統計特性,因此可以對影像進行多次采集形成多幅影像,然后將這多幅影像相加再取平均值,就可以實作噪點的消除;另一種是用來做特效,把多幅影像疊加在一起后做進一步的處理,
??在OpenCV中可以通過加號運算子“+” 對影像進行加法運算,或者通過cv2.add()函式對影像進行加法運算,通常情況下,在灰度影像中,像素用 8 個位元位(一個位元組)來表示,像素值的范圍是[0,255],兩個像素值在進行加法運算時,求得的和很可能超過 255,2.加號“+”運算子
使用加號運算子“+”對影像 a和 b進行求和運算時,遵循如下規則:
當a+b小于等于255時,a+b=a+b;
當a+b大于255時,a+b=mod(a+b,256);
其中mod(a+b, 256)表示計算a+b的和除以 256 取余數;
上述規則也可以簡化為a+b= mod(a+b, 256),在運算時無論相加的和是否大于255,都對數值 256 取模,3.cv2.add()函式
使用
cv2.add()函式對進行加法操作時,會將超過影像飽和值的數值處理為飽和值(最大值),
函式cv2.add()可以用來計算影像像素值相加的和,其語法格式為:
add(src1, src2, dst=None, mask=None, dtype=None)
引數說明:
src1,src2: 相加的兩幅大小和通道數相等的影像或一副影像和一個標量(標量即單一的數值)
dst:可選引數,為輸出結果保存的變數,默認值為None,如果為非None,輸出影像保存到dst對應實參中,其大小和通道數與輸入影像相同,影像的深度(即影像像素的位數)由dtype引數或輸入影像確認
mask: 可選引數,影像掩膜,為8位單通道的灰度影像,用于指定要更改的輸出影像陣列的元素,即輸出影像像素只有mask對應位置元素不為0的部分才輸出,否則該位置像素的所有通道分量都設定為0
dtype: 可選引數,輸出影像陣列的深度,即影像單個像素值的位數(如RGB用三個位元組表示,則為24位)4.影像加法運算案例
import cv2
lena_1=cv2.imread("Lena_gray.jpg")
lena_2=lena_1
result1=lena_1+lena_2
result2=cv2.add(lena_1,lena_2)
cv2.imshow("原圖",lena_1)
cv2.imshow("使用加號“+”運算子相加",result1)
cv2.imshow("使用cv2.add()函式相加",result2)
cv2.waitKey()
cv2.destroyAllWindows()
程式運行結果
原圖:lena灰度影像
使用加號“+”運算子相加: 在計算影像像素值的和時,將和大于 255 的值進行了取模處理,取模后大于 255 的部分值變得更小了,導致本該更亮的像素點變暗了,相加所得的影像看起來并不自然,
使用cv2.add()函式相加: 計算影像像素值的和時,將和大于 255 的值處理為飽和值 255,影像像素值相加后讓影像的像素值增大了,影像整體變亮,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/310671.html
標籤:其他



