В настоящее время я занимаюсь программным обеспечением, которое должно фотографировать изменения в жидкости при нагревании. Я должен делать фотографии каждые 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. Камера — люменера, снятые изображения — 4008х3700 пикселей. закомментированный код использовался для визуализации изображений на дисплее 1080p, но я отключил его, так как мне не нужно видеть каждый кадр на этом этапе
Задача ещё не решена.
Других решений пока нет …