将图像从网络摄像头转换为灰度opencv

时间:2013-11-29 11:28:36

标签: c++ opencv

我是openCV的新手。我需要将Mat从网络摄像头转换为灰度,但没有任何反应我仍然可以看到RGB彩色图像。

capWebCam.read(matOriganal);

cv::Mat im_gray;
cv::cvtColor(matOriganal,im_gray,CV_BGR2GRAY);
QImage qim_gray((uchar *)im_gray.data, im_gray.cols, im_gray.rows,
                    im_gray.step, QImage::Format_RGB888);
ui->lOriginal->setPixmap(QPixmap::fromImage(qim_gray));

请你帮我解决我做错了什么。

1 个答案:

答案 0 :(得分:0)

这看起来很奇怪:

QImage::Format_RGB888

你基本上告诉Qt你的图像存储为RGB,每个通道有8位,但你的实际图像是灰度(一个通道,8位)。

一个简单的解决方案是简单地将灰度图像转换回RGB。

cv::cvtColor(matOriganal,im_gray,CV_BGR2GRAY);
cv::Mat im_gray_rgb;
cv::cvtColor(im_gray,im_gray_rgb,CV_GRAY2RGB);
QImage qim_gray((uchar *)im_gray_rgb.data, im_gray_rgb.cols, im_gray_rgb.rows,
                    im_gray_rgb.step, QImage::Format_RGB888);

即使数据存储为RGB,它仍然是灰色的。这当然意味着你要做一个额外的,不必要的复制。

另一种选择是不使用QImage::Format_RGB888,而是QImage::Format_Indexed8,但这可能意味着您需要指定色彩映射。我没试过,所以我不知道。