如何在opencv python中将图像作为参数正确传递给类
我是python和opencv的新手,当我尝试运行此代码时,在将如何在opencv python中将图像作为参数正确传递给类,python,image,class,opencv,Python,Image,Class,Opencv,我是python和opencv的新手,当我尝试运行此代码时,在将BGR转换为HSV时,在colors方法中出现错误 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) cv2.error: C:\builds\master_PackSlaveAddon-win32-vc12-static\opencv\modules\imgproc\src\color.cpp:7646: error: (-215) (scn == 3 || scn == 4) &
BGR
转换为HSV
时,在colors方法中出现错误
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
cv2.error: C:\builds\master_PackSlaveAddon-win32-vc12-static\opencv\modules\imgproc\src\color.cpp:7646:
error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function cv::ipp_cvtColor
即使我将该部分注释掉,并且仅在该部分返回原样图像时运行该部分,在cv2.imshow()中将图像显示为时也会出现错误
请帮我弄清楚我是否错过了什么
class basicop:
@staticmethod
def colors(color, frame):
if(color=='red'):
lower = np.array([0, 100, 100])
upper= np.array([10, 255, 255])
elif(color=='green'):
lower = np.array([86, 36, 99])
upper= np.array([86, 255, 255])
#CONVERT BGR TO HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(frame, lower, upper)
res = cv2.bitwise_and(frame, frame, mask= mask)
return frame
frame= cv2.imread('gree.jpg')
res=basicop.colors('green', frame)
cv2.imshow('image', res)
k = cv2.waitKey(0)
if k == 27:
cv2.destroyAllWindows()
elif k == ord('s'):
cv2.imwrite('sanj.jpg', res)
cv2.destroyAllWindows()
错误表示imread()无法读取该图像。但是我看到你用color()返回了帧,在这里你应该返回res
class basicop:
@staticmethod
def colors(color, frame):
if(color=='red'):
lower = np.array([0, 100, 100])
upper= np.array([100, 255, 255])
elif(color=='green'):
lower = np.array([50,50,50])
upper= np.array([70, 255, 255])
#CONVERT BGR TO HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(frame, lower, upper)
res = cv2.bitwise_and(frame, frame, mask= mask)
return res
frame= cv2.imread('img.jpg')
res=basicop.colors('green', frame)
cv2.imshow('image', res)
k = cv2.waitKey(0)
if k == 27:
cv2.destroyAllWindows()
elif k == ord('s'):
cv2.imwrite('snL.jpg', res)
cv2.destroyAllWindows()
始终添加完整的错误消息。在
cv2之后添加print(frame)
。读取(…)
。如果打印的是None
,那么文件gree.jpg
就有问题。它可能已损坏,或者与脚本不在同一文件夹中。或者您使用了错误的名称-可能它应该是green.jpg
它不在同一文件夹中,非常感谢@Sanj可能,也许你会想将mask=cv2.inRange(frame,lower,upper)
更改为mask=cv2.inRange(hsv,lower,upper)
,否则,你可以删除hsv=cv2.cvtColor(frame,cv2.COLOR\u BGR2HSV)
我的坏,应该是inRange中的hsv(),谢谢你指出
class basicop:
@staticmethod
def colors(color, frame):
if(color=='red'):
lower = np.array([0, 100, 100])
upper= np.array([100, 255, 255])
elif(color=='green'):
lower = np.array([50,50,50])
upper= np.array([70, 255, 255])
#CONVERT BGR TO HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(frame, lower, upper)
res = cv2.bitwise_and(frame, frame, mask= mask)
return res
frame= cv2.imread('img.jpg')
res=basicop.colors('green', frame)
cv2.imshow('image', res)
k = cv2.waitKey(0)
if k == 27:
cv2.destroyAllWindows()
elif k == ord('s'):
cv2.imwrite('snL.jpg', res)
cv2.destroyAllWindows()