Оптимизировать получение изображений OpenCV

В настоящее время я занимаюсь программным обеспечением, которое должно фотографировать изменения в жидкости при нагревании. Я должен делать фотографии каждые 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, но я отключил его, так как мне не нужно видеть каждый кадр на этом этапе

0 ответов

Другие вопросы по тегам