opencv中Mat数据怎么保存为JPG格式的图片

Mat gmask;
...
...各种计算,得到一个赋值后的gmask矩阵
...
IplImage ipl_img = gmask;
char imagename[256];
sprintf(imagename,"D:\\%1.jpg");
cvSaveImage(imagename,ipl_img); //想要输出得到一张矩阵值对应在颜色上的图片

运行错误:无法从“cv::Mat”转换为“IplImage *”。

1、先把 Mat 数据转为 IplImage;

2、再用 cvSaveImage 来保存为JPG格式

3、代码如下所示:

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-21
imwrite(imagename,gmask);本回答被提问者采纳

opencv从摄像头读取图像怎么改为读取保存好的jpg图片
没有看见void detectAndDisplay( Mat frame );的实现,就默认这个函数做人脸检测了...将“\/\/-- 2. Read the video stream”之后的if块和释放capture的语句删除,添加 frame=imread("D:\/image\/1.jpg",IMREAD_COLOR);D:\/image\/1.jpg替换为所需图片的路径,如果opencv为2.3.1及以下版本,IMREAD...

matlab调用openCV库的Mat类imread函数不能读取图片
楼主知道怎么回事了么? 我目前也遇到了类似的问题,使用了opencv的imread的c++程序直接执行没问题,但是一旦使用MATLAB调用这个程序就会出现找不到图片的问题,这个问题已经困扰我好几天了,用尽了各种办法,只要使用MATLAB用到Opencv的读取图片就会找不到图片。烦死了 ...

Opencv中数据结构Mat的相关属性
数据的存储一直都是个值得关注的问题,所以数据元素存储的位数和范围就十分重要了。depth就体现了每一个像素的位数,即深度。 Mat中包含的图像深度如下所示:另外还需要注意:大部分OpenCV的函数支持的数据深度只有8位和32位,所以尽量使用CV_64F。channels表示了矩阵拥有的通道数量,这个比较容易理解:t...

openCV的数据类型,(cpp版下的)Mat类, imshow,和plt的imshow
在Python版本的OpenCV中,进行图像运算时通常在float32数据类型上操作,以避免过多的舍入误差。将uint8类型图像转换为float32类型,并进行归一化处理(通常是除以255)是常见的做法,以确保数值在0到1的范围内。相反地,将float32类型的图像转换回uint8类型时,通常通过乘以255并取整来实现。使用cv2.imshow...

opencv里的cv::mat::data是什么数据类型?
在OpenCV库中,cv::Mat::data属性是一个指向uchar类型的指针。此特性允许用户以行乘列乘通道的形式来操作矩阵,提供了一种直观的方式来理解图像数据的布局。通过调用type()方法,可以获取矩阵的数据类型。返回的通常是OpenCV定义的宏,如CV_16SC3。根据这个宏来判断数据类型。对于8位数据,数据类型为...

opencv中Mat对象resize后进行ROI相关操作图片无法正常显示
想实现的功能是想把一张随机图片变为固定长宽的图片,这里是1000 * 512,如果图片小于这个size,就居中然后多余部分用黑色填充,如果大于这个size就按比例缩放适用这个size 问题是如果图片比较小,不进行缩放操作,可以正常生成居中涂黑的图片,如果比较大,进行缩放... 展开 cdx...

opencv中为什么保存的图片和显示的图片不同?
应该是图像的深度不同一造成,先看一下你的代码中各个环节是否统一了图像的深度CV_8SC1,也有可能是系统的看图软件对8bit深度的图像显示的有问题。

opencv中MatND和Mat的区别
首先它们并不是函数,只是两个数据类型 OpenCV2.2以前的版本里它们稍微有点区别:Mat特指2维矩阵 MatND是多维矩阵(>=3维)但2.2以后它们被统一成Mat,Mat可以表示任意维矩阵 所以没必要在意MatND和Mat的区别,如果你用的是2.2以后的版本,统一使用Mat就行了。

opencv中图像类型转换 cv::Mat 到const cvArr*
Mat img;const CvArr* s=(CvArr*)&img;上面就可以了,CvArr是Mat的虚基类,所有直接强制转换就可以了 主要C是大写

opencv 中mat类型对应的头文件是什么?
1、在程序的最开始加上: using namespace cv;2、把Mat改为 cv::Mat。OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了...

相似回答