###前提・実現したいこと
OpenCVでカメラキャプチャのプログラムを作成しています。
###発生している問題・エラーメッセージ
現在のフレームが欲しいのですが、最初のキャプチャで5フレーム取得し、
その後のキャプチャでこのバッファをPushしているようで、5フレーム遅れた画像が取得されます。
###該当のソースコード
C++
1#include <opencv2/core/core.hpp> 2#include <opencv2/highgui/highgui.hpp> 3#include <opencv2/imgproc/imgproc.hpp> 4#include <stdio.h> 5#include <unistd.h> 6 7int main() 8{ 9 cv::VideoCapture cap; 10 cap.open(1); 11 if(!cap.isOpened())return -1; 12 13 cap.set(CV_CAP_PROP_FRAME_WIDTH, 640); 14 cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480); 15 16 char srcWindow[] = "srcImage"; 17 cvNamedWindow(srcWindow,CV_WINDOW_AUTOSIZE); 18 19 cv::Mat srcImage(cv::Size(640,480),CV_8UC3); 20 21 int i=0; 22 char cstr0[]=""; //ファイル保存用 23 while(1){ 24 sprintf(cstr0,"src_%d.jpg",i); 25 cap >> srcImage; 26 cv::imwrite(cstr0,srcImage); 27 int key = cv::waitKey(3); 28 if(key == 115){ 29 break; 30 } 31 usleep(500000);//delay 32 i++; 33 } 34}
###試したこと
cap >> srcImageではなく、cap.grab()+cap.retrieve(srcImage)やcap.read(srcImage)もやってみましたが、変わりませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
opencv2.4.5
linux
”その後のキャプチャでこのバッファをPushしているようで、5フレーム遅れた画像が取得されます。”と有りますがソース上ではその記述が有りませんが。
whileループで回してキャプチャしているところです。ですので、2回目のcap >> srcImageで5フレーム遅れた画像が取得されています。
あなたの回答
tips
プレビュー