C++ OpenCV Mat::数据写入文件并读取
当我试图写一个用OpenCV从相机上捕获的图像数据,并将其读出时,事情并没有进展顺利。我尝试了很多格式,比如CV_8UC3和CV_UC1灰度图像 首先,我从相机上拍摄了一幅图像(640*480),并将数据保存到一个文件中C++ OpenCV Mat::数据写入文件并读取,c++,opencv,io,binaryfiles,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>
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”)
但再说一遍,为什么会发生这些事情呢?使用内置的东西: