Python打开cv cv2.cvt颜色错误(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, 0, 218])
upper = np.array([157, 54, 255])
mask = cv2.inRange(hsv, lower, upper)
... 

错误:

cv2.error: OpenCV(4.2.0) c:projectsopencv-pythonopencvmodulesimgprocsrccolor.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,-1>,struct cv::impl::A0x3b52564f::Set<0,5,-1>,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的部分。。。它工作得很好,但现在我拍了一张wile运行的截图,并用";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将等于您已经拥有的灰度通道。

最新更新