我在C ++中使用opencv,我有一个问题。
我想展示cv::Mat
图片,cv::imshow
和cv::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);
}
我该如何做到这一点?
答案 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);