C ++ Opencv将CSV文件加载为cv :: Mat

时间:2014-02-25 16:40:30

标签: c++ opencv csv

我将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 ++等中再次打开。

1 个答案:

答案 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);