2015-09-22 101 views
1

我使用OpenCV/Python,我試圖添加一個數字圖像。OpenCV/Python:錯誤在cv2.add()添加一個數字圖像

我的代碼是:

import cv2 
import numpy as np 
import math 
from matplotlib import pyplot as plt 

img = cv2.imread('messi.jpg',0) 
img2 = img 
img2 = cv2.add(img2, np.uint8([50])) 

我得到了一個錯誤:

OpenCV Error: Assertion failed (type2 == CV_64F && (sz2.height == 1 || sz2.heigh 
t == 4)) in cv::arithm_op, file C:\builds\master_PackSlaveAddon-win64-vc12-stati 
c\opencv\modules\core\src\arithm.cpp, line 1989 
Traceback (most recent call last): 
    File "lab3_examples.py", line 27, in <module> 
    img2 = cv2.add(img, np.uint8([50])) 
cv2.error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\core 
\src\arithm.cpp:1989: error: (-215) type2 == CV_64F && (sz2.height == 1 || sz2.h 
eight == 4) in function cv::arithm_op 

我使用的圖像是messi.jpgenter image description here

相反,如果我用img2 = np.add(img2, np.uint8([50]))強度是通過價值255 value % 255 result,例如260%255=4像素值設置爲4而不是255.結果,白色像素變爲黑色!

這是錯誤的結果圖像。 enter image description here

有什麼想法嗎?

回答

0

我建議轉換BGR圖像HSV圖像:

h_channel, s_channel, v_channel = cv2.split(hsv) 

現在用h_channel玩:

h_channel + = 20 #---You can try any other value as well--- 

現在合併

hsv= cv2.cvtColor(image, cv2.COLOR_BGR2HSV) 

然後使用拆分通道這些頻道又回到了一起:

merged = cv2.merge((h_channel , s_channel , v_channel)) 

最後將圖像轉換回BGR並顯示:

Final_image = cv2.cvtColor(merged, cv2.COLOR_HSV2BGR) 
cv2.imshow('Final output', Final_image) 

你會看到一個增強或暗淡的圖像取決於你的附加價值。

希望它可以幫助....:d

+1

這是一個很好的例子,但我想這樣就沒有必要將它們與'HSV'涉及到我的學生解釋了'RGB'渠道。不管怎樣,謝謝你! – zinon

+0

在這種情況下,您可以使用RGB圖像嘗試相同的情況。將圖像拆分爲單獨的通道並添加一個整數以合併通道,然後查看結果...簡單..:D –

相關問題