繁体   English   中英

如何正确将图像作为参数传递给OpenCV Python中的类

[英]How to correctly pass an image as an argument to a class in opencv python

我是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()中显示图像时,也会产生错误

cv2.imshow('image',res)

cv2.error: C:\builds\master_PackSlaveAddon-win32-vc12-static\opencv\modules\highgui\src\window.cpp:281: 
error: (-215) size.width>0 && size.height>0 in function cv::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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM