カメラからの入力画像と処理結果の画像の2枚を、VGAサイズでリアルタイム(30fps)に表示しようと試みたが、なぜか片方の表示がたまにつまった状態になった
オリジナルプログラムの抜粋
while(true) {
cap >> mat;
cv::imshow("org,mat);
cv::Mat res = hoge(mat);
cv::imshow("hoge",res);
cv::waitKey(10);
}
CPUの負荷は25%ぐらいで余裕のはずである。
いくつか要因を考え試行錯誤を試みた結果、
cv::waitKey(30);
に変更することで表示されるようになったと思われる。
30は、暫定値であり、下記に示すように本来まじめに考える必要がある。
どうやらwaitKeyの時間で、フレームバッファに書き込みをしており、この時間が短いためつまった状態(こま落ちした)になったと推測される。
30fpsを確保するには、1フレームの処理時間(while内の処理)を33msec内にする必要がある。
理想は、画像処理の時間+waitKey = 33msecであるが、この値が小さくても、OpenCVのカメラ入力処理で30fpsに調整されるため表示がおかしくなることはなさそうである
一方大きい場合は、たとえば、waitKey(500)で試してみると、極端なこま落ち状態になった。
以上
0 件のコメント:
コメントを投稿