OpenCV Mat :: data fwrite to file and read

时间:2013-08-11 08:30:52

标签: c++ opencv io binaryfiles

当我尝试使用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();

图像出错了。

感谢您提出任何建议。

1 个答案:

答案 0 :(得分:2)

您无法以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”)


但是,为什么所有这些甚至呢?使用内置的东西: