OpenCV Mat::data转发到文件并读取

OpenCV Mat::data fwrite to file and read

本文关键字:文件 读取 转发 Mat data OpenCV      更新时间:2023-10-16

当我试图转发用OpenCV从相机捕获的图像数据并将其读出时,情况并不好。我尝试了很多格式,比如CV_8UC3和CV_UC1灰色图像。

首先,我从相机上拍摄了一张图像(640*480),并将数据保存到文件中

VideoCapture cap(0);
namedWindow("test",0);
namedWindow("gray",0);
FILE *f=fopen("data.txt","wt+");
while(1)
{
    Mat frame;
    cap>>frame;
    imshow("test", frame);
    //Mat temp(1, 1, CV_8UC3);
       Mat gray;
    if(waitKey(30) >= 0) 
    {
        cvtColor(frame, gray, CV_BGR2GRAY);
        imshow("gray", gray);
        waitKey();
        fwrite(gray.data, sizeof(unsigned char), 640*480,f);
        break;
    }
}
fclose(f);
return 0;

然后在另一个程序中,我试着把它们读出来,比如:

FILE *f = fopen("data.txt", "rt");
unsigned char* buffer;
size_t result;
buffer = (unsigned char*)malloc(sizeof(unsigned char)*640*480);
result = fread(buffer, sizeof(unsigned char), 640*480,f);
fclose(f);
Mat image(640, 480, CV_8UC1, buffer);
namedWindow("test", 0);
imshow("test", image);
waitKey();

然后图像出现错误。

谢谢你的任何建议。

您不能以txt模式保存二进制数据

应该是

FILE *f=fopen("data.txt","wb");

而不是:

FILE *f=fopen("data.txt","wt+");  
// btw, what's the + for ? appending does not make any sense here

读取操作也是如此。("rb"而非"rt")


但再说一遍,为什么还要这样?使用内置的东西:

  • imread/imwrite
  • 文件存储