我是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));
请你帮我解决我做错了什么。
答案 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
,但这可能意味着您需要指定色彩映射。我没试过,所以我不知道。