如何在不使用密钥或同时关闭的情况下更新cv :: namedWindow

时间:2012-10-26 13:40:54

标签: c++ opencv

我在C ++中使用opencv,我有一个问题。

我想展示cv::Mat图片,cv::imshowcv::namedWindow非常容易。但我希望能够看到它并同时更新cv::Mat

实际上我想运行我的代码,它经常(自动地)创建图像,我希望在窗口中看到图像的更新版本。此窗口显示在投影仪上,每时每刻都应显示最新图像。 当代码完成后,我希望能够看到最后一个图像,直到我关闭该窗口。

我的代码的简化版本:

for (int i=1; i < 1000; ++i){
cv::Mat output_projector = cv::Mat::zeros(480, 848, CV_8UC3);
//..
//change the output_projector
//..
cv::namedWindow("Send to projector", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
cv::imshow("Send to projector", output_projector);
cv::waitKey(1);
}

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

就像你做的那样,但尝试在waitKey参数中增加一点时间。例如。标准电影是25 fps,即4ms,所以尝试waitKey(4),如果太快则更大的值。

为了在最后看到您的图像,您应该在循环之前初始化它(以及顺便说一下窗口),并最终调用waitKey(0)

cv::Mat output_projector = cv::Mat::zeros(480, 848, CV_8UC3);
cv::namedWindow("Send to projector", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);

for (int i=1; i < 1000; ++i){
//..
//change the output_projector
//..
cv::imshow("Send to projector", output_projector);
cv::waitKey(10);
}
cv::imshow("Send to projector", output_projector);
cv::waitKey(0);