У меня есть следующий простой код.Когда он запускается, он берет изображение с камеры (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;
}