前提・実現したいこと
USBカメラから画像を取得するプログラムを書いております。
できるだけ誤差なく指定したFPS通りに撮影、保存がしたいなと考えております。
もちろん、誤差を0にするのは不可能であるということは承知しております。
下記のプログラムは、カメラからフレームを取得するプログラムです。
この後、取得した画像をファイルとして保存する機能を追記するつもりです。
ですが、現時点で cap >> frameの行にて時間がかかりすぎています。
ここをできるだけ速くフレームの取得ができるようにするには、何かアイデアはありませんでしょうか。
該当のソースコード
C++
1#include"main.h" 2 3#define FPS 20 4 5 6int main(void) { 7 8 9 VideoCapture cap(0); //カメラ用変数 10 Mat frame; //画像用変数 11 if (!cap.isOpened()) { //カメラが認識できなかった場合 12 return -1; 13 } 14 15 cap.set(CV_CAP_PROP_FRAME_WIDTH, 640); //撮影画像サイズ(幅) 16 cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480); //撮影画像サイズ(高さ) 17 18 19 LARGE_INTEGER freq, start, now; 20 if (!QueryPerformanceFrequency(&freq)) { //時間の単位取得 21 return -2; //失敗 22 } 23 if (!QueryPerformanceCounter(&start)) { //開始時間取得 24 return -2; //失敗 25 } 26 27 double fpsCounter = 1.0; //撮影トリガー用変数 28 29 while (1) { 30 31 if (!QueryPerformanceCounter(&now)) { //現在時間取得 32 return -3; //失敗 33 } 34 double time = (double)(now.QuadPart - start.QuadPart) / freq.QuadPart; //経過時間算出 35 36 if (time >= fpsCounter) { //fpsCounter以上の時間が経過していた場合撮影を行う 37 printf("%f(%f)\n", time,time-fpsCounter); //撮影時の経過時間,と誤差を標準出力 38 39 cap >> frame; //カメラから画像取得 40 41 //imshow("", frame); //画像を画面出力 42 fpsCounter += 1.0 / FPS; //カウンター更新 43 } 44 45 46 if (waitKey(1) == 0x1b) //Escキーが押されたら終了 47 break; 48 49 } 50 51 return 0; 52}
補足情報(FW/ツールのバージョンなど)
OpenCV-3.4.2
VisualStudio2017
OS:Windows10
CPU:Core i7-8700K
メモリ:DDR4 8GB×2
GPU:GTX 1060 6GB
どうかよろしくお願いいたします。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/17 04:41
2018/09/19 15:52 編集
2018/09/19 16:52
2018/09/25 15:07
2018/09/25 16:23