2012-03-11 53 views
0

兩個圖像,當我在OpenCV中添加兩個圖像,總和被限制爲255(這兩個圖像是UINT8的)差異添加在numpy的和OpenCV

即175 + 100 255是在OpenCV中。

但是如果我們使用numpy.add函數添加它,結果不是有限的。

即175 + 100在numpy中爲19。

問題:

1)爲什麼會這樣?

2)有沒有辦法使np.add的行爲像cv2.add一樣?即限制總和爲255?

在此先感謝。

回答

3

NumPy在溢出而不是削波時使用「模」運算。這是在C中添加uint8整數的行爲。所以,175 + 100%256 = 19這是你得到的結果。

爲了得到這條新聞的行爲,你需要做一些工作:

這裏有一對夫婦的想法:

1)使用較高精度:

im1 = im.astype('u2') 
im2 = im.astype('u2') 
tmp = im1 + im2 
result = tmp.clip(0,255).astype('u1') 

2)請確定結果是> =兩個輸入值:

tmp = im1 + im2 
mask = (tmp < im1) | (tmp < im2) 
tmp[mask] = 255 
+0

第二種方法比第一種慢很多。 – 2012-03-11 08:24:43