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

3
这是我的代码,它非常简单。
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个回答

7

方法convertTo不进行颜色转换。

如果你想要从BGR转换到GRAY,可以使用函数cvtColor

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

我应该早就知道的(捂脸)。谢谢! - Jason
1
不客气 :) 顺便说一下:如果您想要直接加载灰度图像,可以使用以下代码:Mat image_gray = imread("filename.png", CV_LOAD_IMAGE_GRAYSCALE); - Ove
@Jason... 如果您得到了满意的答案,可以考虑接受其中一个。 - sgarizvi

0

image.convertTo(image_gray, CV_RGB2GRAY);

这是错误的。正确的应该是:

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

试试这个。


0

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

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

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

0
如果您需要以灰度获取视频(例如来自网络摄像头),您也可以将视频的饱和度设置为零。(例如使用Python语法)
 capture = cv.CaptureFromCAM(camera_index) 

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

... cv.SetCaptureProperty(捕获,cv.CV_CAP_PROP_SATURATION,0)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接