【问题标题】:OpenCV's cvtColor throws an exception: Invalid number of channels in input imageOpenCV 的 cvtColor 抛出异常:Invalid number of channels in input image
【发布时间】:2020-04-08 23:55:52
【问题描述】:

我有一个cv::Mat img,我正在尝试使用以下方法将其转换为CV_8UC3

cv::cvtColor(img, dst, cv::COLOR_GRAY2RGB);

它正在抛出这个错误:

 Exception: OpenCV(4.2.0) external/opencv/modules/imgproc/src/color.simd_helpers.hpp:92: error: 
(-2:Unspecified error) in function 'cv::impl::(anonymous namespace)::CvtHelper<cv::impl::(anonymous namespace)::Set<1, -1, -1>, 
cv::impl::(anonymous namespace)::Set<3, 4, -1>, cv::impl::(anonymous namespace)::Set<0, 2, 5>, cv::impl::(anonymous namespace)::NONE>::CvtHelper(cv::InputArray, cv::OutputArray, int) 
[VScn = cv::impl::(anonymous namespace)::Set<1, -1, -1>, VDcn = cv::impl::(anonymous namespace)::Set<3, 4, -1>, VDepth = cv::impl::(anonymous namespace)::Set<0, 2, 5>, 
sizePolicy = cv::impl::(anonymous namespace)::NONE]'
    Invalid number of channels in input image:
    'VScn::contains(scn)' where 'scn' is 3

任何想法这可能意味着什么?

【问题讨论】:

    标签: opencv image-processing


    【解决方案1】:

    错误意味着图像已经是“颜色”(意味着它已经有 3 个通道)。 OpenCV 无法将其从GRAY 转换为RGB,因为灰度图像只有一个颜色通道。

    CV_8UC3 表示您有 3 个 8 位深度的颜色通道。如果你真的想确保你有一个CV_8UC3,你可以在制作你的图片时尝试这样的事情:

    // create a new 320x240 image
    Mat img(Size(320,240),CV_8UC3);
    

    如果您分享您是如何创建 img 的,我可以确认是这种情况,但无论如何这就是错误的含义。

    更新

    This answer 为调试Mat 对象提供了一些很好的指导。根据错误代码,您已经有一个 3 通道图像,因此可以处理 C3 部分。 8U 部分表示它都是 8 位无符号二进制数据,范围为 0 到 255。一旦您知道我上面提到的脚本的输出,您就可以相应地对其进行缩放或转换。

    This answer 详细介绍了如何转换为不同的位深度。

    【讨论】:

    • 谢谢马修。 img 是按照此处的 opencv 详细拼接算法将图像拼接在一起的结果创建的:github.com/opencv/opencv/blob/master/samples/cpp/…。如果我打印出img.type() 它给了我19 而不是CV_8UC3 这让我失望。在那种情况下,我怎样才能确保它的类型给我CV_8UC3
    • @alittlebirdy 我更新了我的答案。试试你在那里看到的,然后告诉我你得到了什么。
    • Matthew,我的图片类型好像是CV_16S。根据第二个链接,我可以尝试这样的事情:img.convertTo(img, CV_8U, 0.00390625); 并且效果很好!非常感谢!
    猜你喜欢
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多