Image Qt OpenCV:如何在Qt中显示灰度图像(OpenCV)

Image Qt OpenCV:如何在Qt中显示灰度图像(OpenCV),image,qt,opencv,grayscale,Image,Qt,Opencv,Grayscale,我这里有一段代码。 这是一个使用OpenCV和Qt(用于GUI)的相机捕获应用程序 void主窗口::在按钮上点击() { cv::视频捕获上限(0); 如果(!cap.isOpened())返回; //名称(“边缘”,1); 矢量彩色表; 对于(inti=0;i>图像; CVT颜色(图像、边缘、CV_bgr2灰色); GaussianBlur(边,边,cv::Size(7,7),1.5,1.5); Canny(边,边,0,30,3); //imshow(“边”,边); 如果(cv::waitK

我这里有一段代码。 这是一个使用OpenCV和Qt(用于GUI)的相机捕获应用程序

void主窗口::在按钮上点击()
{
cv::视频捕获上限(0);
如果(!cap.isOpened())返回;
//名称(“边缘”,1);
矢量彩色表;
对于(inti=0;i<256;i++)颜色表,向后推(qRgb(i,i,i));
QImage img;
img.setColorTable(可着色);
对于(;;)
{
cap>>图像;
CVT颜色(图像、边缘、CV_bgr2灰色);
GaussianBlur(边,边,cv::Size(7,7),1.5,1.5);
Canny(边,边,0,30,3);
//imshow(“边”,边);
如果(cv::waitKey(30)>=0)中断;
//更改颜色通道顺序
//cv::CVT颜色(图像,图像,cv_BGR2RGB);
img=QImage((常量无符号字符*)(edges.data),
image.cols、image.rows、QImage::Format_Indexed8);
//在标签上显示
ui->label->setPixmap(QPixmap::fromImage(img,Qt::AutoColor));
//调整标签大小以适合图像
ui->label->resize(ui->label->pixmap()->size());
}
}
最初,“边缘”显示为红色,背景为绿色。然后切换为蓝色背景。这种转换是随机发生的。
如何以稳定的方式在黑色背景中显示白色边缘。

简而言之,添加
img.setColorTable(colorTable)
就在
//显示在标签上
注释之前

有关详细信息,请在代码开头创建图像并影响颜色表:

QImage img;
img.setColorTable(colorTable);
然后在无限循环中,您将执行以下操作:

img =  QImage((const unsigned char*)(edges.data), image.cols, image.rows, QImage::Format_Indexed8);

发生的情况是,您破坏了在代码开始时创建的图像,此新图像的颜色映射未设置,因此使用默认值,从而产生彩色输出。

如果创建了一个包含3个通道的结果图像并操作了一个通道,请确保您的操作不限于一个或两个通道,确保你对剩下的两个人都这么做。或者最终创建一个单通道图像。
img =  QImage((const unsigned char*)(edges.data), image.cols, image.rows, QImage::Format_Indexed8);