如何解决Python open-cv cv2.cvtColor错误COLOR_BGR2GRAY
我的代码中的cv2.cvtColor有问题:
sct_img = self.screen.grab(self.monitor)
img = Image.frombytes('RGB',sct_img.size,sct_img.rgb)
img = np.array(img)
img = self.convert_rgb_to_bgr(img)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower = np.array([0,218])
upper = np.array([157,54,255])
mask = cv2.inRange(hsv,lower,upper)
...
错误:
cv2.error: OpenCV(4.2.0) c:\projects\opencv-python\opencv\modules\imgproc\src\color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function '__cdecl cv::impl::`anonymous-namespace'::CvtHelper<struct cv::impl::`anonymous namespace'::Set<3,4,-1>,struct cv::impl::A0x3b52564f::Set<3,-1,struct cv::impl::A0x3b52564f::Set<0,5,2>::CvtHelper(const class cv::_InputArray &,const class cv::_OutputArray &,int)'
> Invalid number of channels in input image:
> 'VScn::contains(scn)'
> where
> 'scn' is 1
我已经在使用“ img = cv2.imread(image_path)”导入已经灰度化的图像,然后使用hsv进行导入之前对其进行了测试...效果很好,但是现在我在运行和尝试用“ cv2.COLOR_BGR2GRAY”进行灰度处理,我在上面收到此错误。删除该行时,不会出现任何错误,但是图像不是我想要的阈值。因此有必要在我的代码继续使用hsv之前对图像进行灰度处理。
我希望有人对我有解决方案,谢谢!
解决方法
cv2.COLOR_BGR2HSV
表示它希望将BGR图像作为输入并返回HSV图像。实际上,它不知道您是否准确地传递了BGR或任何其他3通道格式,但是在您的情况下,您尝试将其传递给1通道灰度图像,这很关键。您应该将灰度转换回BGR(opencv只会将灰度通道增加三倍),然后执行BGR2HSV
。
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
但是等等,您为什么还需要?将灰度转换为HSV将使H和S通道充满零,而V将等于您已有的灰度通道。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。