[英]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.