Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在opencv python中将图像作为参数正确传递给类_Python_Image_Class_Opencv - Fatal编程技术网

如何在opencv python中将图像作为参数正确传递给类

如何在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) &

我是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) && (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()