2

我在 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);
}

我怎样才能做到这一点?

4

1 回答 1

0

就像你做的那样,但尝试在 waitKey 参数中增加一点时间。例如,标准电影是 25 fps,即 4 毫秒,因此请尝试 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);
于 2012-10-26T14:11:39.363 回答