当前位置: 首页 > 知识库问答 >
问题:

Python打开cv2。CVT颜色错误(颜色为灰色)

袁山
2023-03-14

我有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_path)",然后部分与hsv...它工作得很好,但是现在我用“cv2”拍摄了一张屏幕截图,并尝试了灰度。COLOR_BGR2GRAY"我得到上面这个错误。当我删除该行,我不会得到任何错误,但图像不是我想要的阈值。因此,在我的代码继续使用hsv之前,必须将图像灰度化...

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

共有1个答案

公西永嘉
2023-03-14

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

 类似资料:
  • 原文:Specifying Colors 在 matplotlib 的几乎所有地方,用户都可以指定颜色,它可以以如下形式提供: RGB 或者 RGBA 浮点值元组,[0, 1]之间,例如(0.1, 0.2, 0.5)或者(0.1, 0.2, 0.5, 0.3)。 RGB 或者 RGBA 十六进制字符串,例如#0F0F0F或者#0F0F0F0F。 [0, 1]之间的浮点值的字符串表示,用于表示灰度,

  • 如果你认为它重复了一些其他的问题,那么我应该让你现在我已经尝试了3,4页的谷歌搜索,也实现了他们。

  • 本节,我们将探讨另一个常用的像素处理算法,把颜色改为灰色。 图3-9 彩色图像转为灰色图像 警告:由于getImageData()方法的安全限制,本节的例子必须在Web服务器上运行。 绘制步骤 按照以下步骤,把一幅图像的颜色转换为灰色: 1. 定义画布上下文: window.onload = function(){ var canvas  = document.getElementById(

  • 本文向大家介绍python中plt.imshow与cv2.imshow显示颜色问题,包括了python中plt.imshow与cv2.imshow显示颜色问题的使用技巧和注意事项,需要的朋友参考一下 在用plt.imshow和cv2.imshow显示同一幅图时可能会出现颜色差别很大的现象。 这是因为:opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式 程序运行结果如

  • 用法 这是一个基于 material design 基础颜色的调色板。每一种颜色的定义有一个基本的颜色类和一个可选的减轻或变暗的类。 背景颜色 应用一个背景颜色只需要增加颜色的名称和颜色深浅度到元素的 class 属性中。这是一个卡片面板带一个 teal、lighten-2 类。 <div class="card-panel teal lighten-2">这是一个卡片面板带一个 teal lig

  • 在前面的教程中我们已经简要提到过该如何在OpenGL中使用颜色(Color),但是我们至今所接触到的都是很浅层的知识。本节我们将会更深入地讨论什么是颜色,并且还会为接下来的光照(Lighting)教程创建一个场景。 现实世界中有无数种颜色,每一个物体都有它们自己的颜色。我们需要使用(有限的)数值来模拟真实世界中(无限)的颜色,所以并不是所有现实世界中的颜色都可以用数值来表示的。然而我们仍能通过数值