OpenCV C ++ каждый раз возвращает буфер другого размера при кодировании изображения с камеры - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть следующий простой код.Когда он запускается, он берет изображение с камеры (CAP_V4L смещение камеры предназначено для Ubuntu, в других ОС, таких как OSX, в этом нет необходимости), кодирует его в png, вычисляет его размер и декодирует его.Проблема в том, что размер буфера закодированного изображения каждый раз отличается при каждом запуске.Это почему?Почему это не равно?

#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#ifndef __OPENCV__
#include "opencv2/opencv.hpp"
#define __OPENCV__
#endif
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
    int bak, temp;
    fflush(stdout);
    bak = dup(1);
    temp = open("/dev/null", O_WRONLY);
    dup2(temp, 1);
    close(temp  );
    Mat frame;
    std::vector<uchar> buf;
    namedWindow( "Camera", WINDOW_AUTOSIZE );
    VideoCapture cam(0 + CAP_V4L);
    sleep(1);
    if (!cam.isOpened())
    {
        cout << "\nCould not open reference " << 0 << endl;
        return -1;
    }
    for (int i=0; i<30; i++)
    {
        cam>>frame;
    }
    //cout<<"\nCamera initialized\n";
    fflush(stdout);
    dup2(bak, 1);
    close(bak);

    imencode(".png",frame, buf);
    cout<<buf.size()<<endl;
    Mat res = imdecode(buf, 1);

    imshow("Camera",res);
    waitKey(0);
    cout<<'\0';
    return 0;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...