OpenCV 保存 cv::Mat 数据为图片的方法
文章目录
如果你用 cvSaveImage 直接把 cv::Mat 数据保存为图片,则有可能有下列问题:
OpenCV Error: Bad argument (Unknown array type) in cvarrToMat, file /home/water/soft/OpenCV-2.3.1/modules/core/src/matrix.cpp, line 646 terminate called after throwing an instance of 'cv::Exception' what(): /home/water/soft/OpenCV-2.3.1/modules/core/src/matrix.cpp:646: error: (-5) Unknown array type in function cvarrToMat
这个时候,可以先把 cv::Mat 转为 IplImage 再用 cvSaveImage 来保存,直接用 IplImage 可以直接强制类型转 cv::Mat 为 IplImage 数据类型。
下面这段代码示例,是从硬盘里读取一个图片文件的二进制数据为 cv::Mat 数据结构,然后再转为 IplImage 数据结构并保存为新的图片文件。
const char* filename = "./testImages/12.jpg"; std::ifstream file(filename); std::vector<char> data; file >> std::noskipws; std::copy(std::istream_iterator<char>(file), std::istream_iterator<char>(), std::back_inserter(data)); cv::Mat matrixJprg = cv::imdecode(cv::Mat(data), 1); IplImage qImg; qImg = IplImage(matrixJprg); // cv::Mat -> IplImage cvSaveImage("./out.jpg", &qImg);
当然,其实还有更简单的方法:
cv::Mat image = GetImageBuff();//获取 cv::Mat 数据,根据实际业务编写 cv::imwrite("test.jpg", image);
文章作者 cookwhy
上次更新 2013-08-31