我目前正在做一个软件,它需要在加热时拍摄流体变化的照片。我必须每 100 毫秒拍照一次。我做了一个“hello world”代码来检查是否有可能在没有同步的情况下拍照
#include "stdafx.h"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include<time.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
using namespace cv;
//** @function main */
int main()
{
//! [mat]
int n=5;
Mat * frame;
frame = new Mat[n];
//! [mat]
//! [cap]
VideoCapture cap(0);
//! [cap]
//! [window]
time_t prev = clock();
namedWindow("video capture", WINDOW_NORMAL);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 4008);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 3700);
cap.set(CV_CAP_PROP_EXPOSURE, -2.5);
//! [window]
//! [trackbar]
//while ((char)waitKey(1) != 'q') {
for (int i = 0; i<5; i++) {
cout << clock()-prev<<endl;
prev = clock();
//! [while]
cap >> frame[i];
//! [show]
}
for (int i = 0; i < 5; i++)
imwrite("test" + std::to_string(i) + ".jpg", frame[i]);
while ((char)waitKey(1) != 'q') {}
return 0;
}
我一拍完就开始保存图像,我得到了大约 600 毫秒的经过时间。因此我将它们存储在一个动态数组中。这将时间减少了一半,但仍然不是我需要的。我正在使用 Visual Studio 2017 社区,这是使用 opencv 3.3.1 的发布代码,相机是 lumenera,拍摄的图像是 4008x3700 像素。注释代码用于在 1080p 显示器中可视化图像,但我禁用了它,因为我不需要在这个阶段查看每一帧