开发者

Qt-OpenCV:How to display grayscale images(opencv) in Qt

开发者 https://www.devze.com 2023-04-09 05:47 出处:网络
I have a piece of code here. This is a camera capture application using OpenCV and Qt(for GUI). void MainWindow::on_pushButton_clicked()

I have a piece of code here. This is a camera capture application using OpenCV and Qt(for GUI).

void MainWindow::on_pushButton_clicked()
{

    cv::VideoCapture cap(0);

    if(!cap.isOpened()) return;

    //namedWindow("edges",1);
    QVector<QRgb> colorTable;
    for (int i = 0; i < 256; i++) colorTable.push_back(qRgb(i, i, i));

    QImage img;
    img.setColorTable(colorTable);

    for(;;)
    {
        cap >> image;
        cvtColor(image, edges, CV_BGR2GRAY);
        GaussianBlur(edges, edges, cv::Size(7,7), 1.5, 1.5);
        Canny(edges, edges, 0, 30, 3);
        //imshow("edges", edges);
        if(cv::waitKey(30) >= 0) break;

    // change color channel ordering
    //cv::cvtColor(image,image,CV_BGR2RGB);

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

    // display on label
  开发者_开发知识库  ui->label->setPixmap(QPixmap::fromImage(img,Qt::AutoColor));
    // resize the label to fit the image
    ui->label->resize(ui->label->pixmap()->size());   

    }
}

Initially "edges" is displayed in red with green background.Then it switches to blue background. This switching is happening randomly. How can I display white edges in a black background in a stable manner.


In short, add the img.setColorTable(colorTable); just before the // display on labelcomment.

For more details, you create your image and affect the color table at the begining of your code:

QImage img;
img.setColorTable(colorTable);

Then in the infinite loop, you are doing the following:

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

What happens is that you destroy the image created at the begining of your code, the color map for this new image is not set and thus uses the default resulting in a colored output.

0

精彩评论

暂无评论...
验证码 换一张
取 消