私は、通常100 HZまたは10 msのスキャン時間を実行し、時間が重要なタスクを実行しているシステムを持っています。私はopencvでカメラを追加しようとしています(ユーザーがシステムとやりとりした時に応じて、10秒から数分の間でどこにでも入ることができます)、品質管理のために画像をキャプチャします。ここ は私のコードがやっていることです。カメラフレームのキャプチャ
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
return -1;
UMat frame;
for(;;){
if (timing_variable_100Hz){
cap >> frame; // get a new frame from camera
*Do something time critical*
if(some_criteria_is_met){
if(!frame.empty()) imwrite("Image.jpg", frame);
}
}
}
return 0;
}
今私がいる問題がcap >> frame
は、多くの時間を要することです。
スキャン時間は定期的に3msぐらいですが、現在は40msです。今私の質問は、とにかくカメラを開いて、キャプチャし、その後、すべてのフレームをキャプチャする必要はないですか?私はif(some_criteria_is_met)
の中でcap >> frame
を動かして、最初の画像を正しく取り込めましたが、数分後に撮られた2番目の画像は、最初の取り込まれた画像を1フレーム過ぎていました。
おかげ
あなたは[グラブ](HTTPを見ませんでした。 opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=videocapture#videocapture-grab)と[retrieve](http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html)を参照してください。 ?ハイライト= videocapture#videocapture-retrieve)関数?ドキュメントからは、あなたが探しているものだけであるようです。 – AldurDisciple
私はこれを試してみましたが、vcap >> frame vs vcap、grab()を使用した場合、大きな違いは見られませんでした。彼らは両方とも完了するのに約32ミリ秒かかりました。多分グラブ()は1ミリ秒か2秒かかりました。 これは面白いのですが、データシートにはretrieve()が遅いメソッドであることが記載されていますが、私のテストではそうでないことが示されています。 –
私はスレッドの答えに同意します –