繁体   English   中英

cv2.cvtColor 将图像转换为 HSV 时出错(使用 cv2.COLOR_BGR2HSV)

[英]Error in cv2.cvtColor converting an image to HSV (using cv2.COLOR_BGR2HSV)

当我从一个文件夹打开多个图像并尝试将每个图像转换为 BGR2HSV 时,我收到此错误:

回溯(最近一次调用最后):文件“create_gestures_manual.py”,第 123 行,在 get_img(lab_path) 文件“create_gestures_manual.py”,第 114 行,在 get_img store_images(g_id,dirr) 文件“create_gestures_manual.py”,第 61 行, 在 store_images imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) cv2.error: OpenCV(4.5.2) /tmp/pip-req-build-wu1ri_rx/opencv/modules/imgproc/src/color.simd_helpers.hpp: 92:错误:(-2:未指定的错误)在函数 'cv::impl::{anonymous}::CvtHelper<VScn, VDcn, VDepth, sizePolicy>::CvtHelper(cv::InputArray, cv::OutputArray, int ) [with VScn = cv::impl::{anonymous}::Set<3, 4>; VDcn = cv::impl::{匿名}::Set<3>; VDepth = cv::impl::{匿名}::Set<0, 5>; cv::impl::{匿名}::SizePolicy sizePolicy = cv::impl::::NONE; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]'

输入图像中的通道数无效:“VScn::contains(scn)”,其中“scn”为 1

以下是我的代码片段:

while True:
    framee = cv2.imread(dirr,0)
    img = cv2.flip(framee, 1)
    cv2.imshow('IMG',img)
    imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

这是什么意思? . 请帮帮我。 以及如何解决这个问题

您将图像读取为灰度图像。 改变这部分:

framee = cv2.imread(dirr)

拥有 bgr 图像,然后将 bgr 转换为 hsv。

错误的来源是framee是单通道灰度图像(基于它创建的img也是如此)。 它不是 3 通道彩色图像,因此不能直接转换为 hsv。

正如您在此链接中看到的: imread ,第二个参数flags确定读取图像的格式。

在您的代码中,您使用0 ,它在内部映射到IMREAD_GRAYSCALE 因此即使您的图像文件包含 rgb 图像,它也会被转换为 1 通道灰度。

由于flags的默认值为IMREAD_COLOR ,您可以简单地使用:

framee = cv2.imread(dirr)

附带说明:即使您不想要此默认值,也建议使用 opencv 枚举值(例如cv2.IMREAD_GRAYSCALE )而不是整数。 这样做你永远不会遇到这个问题。

暂无
暂无

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

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