【问题标题】:C++ and OpenCV: Issue Converting Image to grayscaleC++ 和 OpenCV:将图像转换为灰度的问题
【发布时间】:2013-01-03 20:09:15
【问题描述】:

这是我的代码。这很简单。

Mat image  = imread("filename.png");

imshow("image", image);
waitKey();

//Image looks great.

Mat image_gray;
image.convertTo(image_gray, CV_RGB2GRAY);

imshow("image", image_gray);
waitKey();

但是当我调用image.convertTo(image_gray, CV_RGB2GRAY); 行时,我收到以下错误消息:

OpenCV Error: Assertion failed (func != 0) in unknown function, file ..\..\..\sr
c\opencv\modules\core\src\convert.cpp, line 1020

使用 OpenCV 2.4.3

【问题讨论】:

    标签: c++ opencv rgb grayscale


    【解决方案1】:

    方法convertTo不做颜色转换。

    如果要从 BGR 转换为 GREY,可以使用函数cvtColor

    Mat image_gray;
    cvtColor(image, image_gray, CV_BGR2GRAY);
    

    【讨论】:

    • 我早该知道(捂脸)。谢谢!
    • 不客气 :) 顺便说一句:如果你想使用这个,你可以直接以灰度加载图像:Mat image_gray = imread("filename.png", CV_LOAD_IMAGE_GRAYSCALE);
    • @Jason...如果你得到一个满意的答案,你可以考虑接受一个。
    【解决方案2】:

    函数cv::Mat::convertTo 不用于颜色转换。它用于类型转换。目标图像应与源图像具有相同的大小和通道数。

    要将 RGB 转换为灰色,请使用函数 cv::cvtColor

    cv::cvtColor(image,image_gray,CV_RGB2GRAY);
    

    【讨论】:

      【解决方案3】:

      如果您需要以灰度方式获取视频(例如来自网络摄像头),您还可以将视频源的饱和度设置为零。 (例如 Python 语法)

       capture = cv.CaptureFromCAM(camera_index) 
      

      ... cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_SATURATION,0)

      【讨论】:

        【解决方案4】:

        image.convertTo(image_gray, CV_RGB2GRAY); 这是错误的。正确的是,

         Mat gray_image;
         cvtColor(image, gray_image, CV_BGR2GRAY);
        

        试试这个。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-26
          • 2015-10-07
          • 2013-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-16
          相关资源
          最近更新 更多