我将cv :: Mat保存为CSV文件,该文件工作正常,但是当我加载它并将其转换回cv :: Mat时,某些内容正在被破坏。当我打印出cv :: Mat的内容时,它们与csv文件的内容不同。当我显示Mat对象时,我会看到一个宽大的白色窗口。
cv::imwrite("cameraFrame1.jpg", frame);
outFile.open("cameraFrame1.csv");
outFile << cv::format(frame, "CSV") << std::endl;
outFile.close();
...
CvMLData mlData;
mlData.read_csv("cameraFrame1.csv");
const CvMat* tmp = mlData.get_values();
cv::Mat img(tmp, true);
tmp->CvMat::~CvMat();
std::cout << "img: " << img << std::endl;
cv::namedWindow("img");
cv::imshow("img", img);
cv::waitKey(0);
编辑:
我完全不依赖于这种方法,如果有更好的方法将图像保存为CSV然后将其读入,我将很乐意转向它。这一点是将图像保存为原始数据,最有可能是在数据库中,然后可以在matlab,python,c ++等中再次打开。
答案 0 :(得分:3)
我需要设置图像深度和通道,这是c ++中的cv :: Mat类型,以及尺寸
cv::imwrite("cameraFrame1.jpg", frame);
outFile.open("cameraFrame1.csv");
outFile << cv::format(frame, "CSV") << std::endl;
outFile.close();
...
CvMLData mlData;
mlData.read_csv("cameraFrame1.csv");
const CvMat* tmp = mlData.get_values();
cv::Mat img(tmp, true);
// set the image type
img.convertTo(img, CV_8UC3);
// set the image size
cv::resize(img, img, cv::Size(320, 256));
tmp->CvMat::~CvMat();
std::cout << "img: " << img << std::endl;
cv::namedWindow("img");
cv::imshow("img", img);
cv::waitKey(0);