Python opencv cv2.CVT颜色错误(颜色为灰色)

2024-04-29 01:45:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码中存在cv2.CVT颜色问题:

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:\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,-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\u path)”进行了灰度处理,然后是带有hsv的部分。。。这是完美的工作,但现在我采取的截图威尔运行,并尝试它的灰度与“cv2.COLOR_BGR2GRAY”我得到这个错误上面。当我删除该行时,我不会得到任何错误,但图像不是我想要的阈值。所以有必要在我的代码继续hsv之前对图像进行灰度化

我希望有人能给我一个解决方案,提前谢谢


Tags: 图像selfimg错误nperrorarraycv2
1条回答
网友
1楼 · 发布于 2024-04-29 01:45:57

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将等于您已有的灰色通道

相关问题 更多 >