cv::imshowをwhile文のなかでひたすら呼びまくると、画像が更新できない。
while(true){
if(flag) img = cv::imread("img.png");
else img = cv::imread("img2.png");
flag = !flag;
cv::imshow("window", img);
}
cv::waitKeyを入れると画像が更新される。
while(true){
if(flag) img = cv::imread("img.png");
else img = cv::imread("img2.png");
flag = !flag;
cv::imshow("window", img);
cv::waitKey(33); // new line
}
cv::waitKeyの代わりにstd::this_thread::sleep_forを使うと、また更新できなくなる。
while(true){
if(flag) img = cv::imread("img.png");
else img = cv::imread("img2.png");
flag = !flag;
cv::imshow("window", img);
// cv::waitKey(33);
std::this_thread::sleep_for(std::chrono::milliseconds(33)); // new line
}
おそらく、std::this_thread::sleep_for (boost::this_thread::sleep など、その他のthreadをsleepをするようなやつも同じ) がスレッド自体をsleepさせる一方で、cv::waitKeyは、opencvの処理をするためにその先に進まなくしている。