C ++和OpenCV:问题将图像转换为灰度

时间:2013-01-20 17:46:34

标签: c++ opencv rgb grayscale

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

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

4 个答案:

答案 0 :(得分:6)

方法convertTo不进行颜色转换。

如果您想从BGR转换为GRAY,可以使用函数cvtColor

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

 capture = cv.CaptureFromCAM(camera_index) 

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

答案 3 :(得分:0)

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

2.5 - 3

试试这个。