簡體   English   中英

如果在 windows 10 中聲明 openCV namedWindow,QT 圖像顯示將無法正常工作

[英]QT image display is not working without declaring openCV namedWindow in windows 10

我正在使用 windows 10 和 QT 5.14 opencv 4.20 和 contrib 版本。

我正在將網絡攝像頭捕獲的圖像顯示到 QT label。 它在 Ubuntu 中運行良好,但在遷移到 windows 后無法正常運行。 只有當我創建 openCV namedWindow("frame",0) 時它才有效。 它會創建額外的 openCV 的 window。 我安裝了 openCV 4.20 with_FFMPEG open check。

我找不到原因? 如果我試圖讓 namedWindow() 隱藏或不可見,但沒有選擇。 任何人都可以在這方面幫助我嗎?

這是代碼。 如果我評論 imshow("Frame", frame); 它不起作用並且取消注釋這條線有效,但它會打開兩個 windows.... 任何幫助將不勝感激。

我嘗試了許多 openCV 的安裝,FFMPEG 打開和關閉,GStreamer 打開和關閉,在 cap_dshow.cpp 文件中添加#define NO_DSHOW_STRSAFE 但沒有得到任何解決方案。



void MainWindow::on_pushButton_clicked()
{
    VideoCapture cap(0);
    if(!cap.isOpened()){
      cout << "Error opening video stream or file" << endl;

    }

    while(1){

      Mat frame;
      cap >> frame;
      if (frame.empty())
        break;

//      imshow( "Frame", frame );

      ui->label->setPixmap(QPixmap::fromImage(QImage(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888).rgbSwapped()));

      char c=(char)waitKey(25);
      if(c==27)
        break;
    }

    cap.release();
    destroyAllWindows();

}

Regards

我正在分享,以便其他人在面臨同樣問題時可以受益。

問題通過添加解決

qApp->processEvents(); 之后

ui->label->setPixmap(QPixmap::fromImage(QImage(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888).rgbSwapped()));

其實這個qApp->processEvents(); 它會根據指定的標志處理調用線程的所有掛起事件,直到沒有更多事件要處理。

當您的程序忙於執行長時間操作時,您可以偶爾調用此 function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM