opencv如何将彩色图转换为灰度图并保存灰度图

时间:2022-07-05 00:17:40
enviroment:
windows8.1     64位    vs2013    opencv248

code:
#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>
#pragma comment(linker, " /subsystem:\"windows\" /entry:\"mainCRTStartup\" ")
using namespace std;
using namespace cv;
int main()
{
Mat src_mat = imread("pp.jpg");
Mat gray_mat;
cvtColor(src_mat, gray_mat, CV_BGR2GRAY);

cvSaveImage("gray_mat.jgp", gray_mat);

imshow("原图", src_mat);
imshow("灰度图", gray_mat);
waitKey();
return 0;

}




----- 已启动生成:  项目: lena, 配置: Debug Win32 ------
1>  源.cpp
1>c:\users\labpc-user\documents\visual studio 2013\projects\lena\lena\源.cpp(15): error C2664: “int cvSaveImage(const char *,const CvArr *,const int *)”: 无法将参数 2 从“cv::Mat”转换为“const CvArr *”
1>          没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
========== 生成:  成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
请各位朋友帮忙!

11 个解决方案

#1


这个应该很明显吧    函数调用的时候实参与形参的类型不符    把gray_mat的类型改为能匹配const CvArr *的类型即可。

#2


引用 1 楼 ganruan 的回复:
这个应该很明显吧    函数调用的时候实参与形参的类型不符    把gray_mat的类型改为能匹配const CvArr *的类型即可。

不是很明白啊,怎么改??? opencv如何将彩色图转换为灰度图并保存灰度图

#3


只有8位单通道或者3通道可以使用这个函数保存,如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换.

#4


引用 3 楼 ganruan 的回复:
只有8位单通道或者3通道可以使用这个函数保存,如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换.

我在网上找了好多,全是这个。亲,能给个样例吗?!

#5


用imwrite不行吗

#6


Mat不能直接这样写,要看你的opencv版本,里面对应的图像类型不同

#7


请问楼主这个问题解决了吗?碰到了同样的问题

#8


使用imwrite试试

#9


SaveImage是适用于IplImage的,imwrite应该可以

#10


后五行改为以下:

IplImage* pImage ;
pImage = &IplImage (gray_mat);

cvSaveImage("gray_mat.jgp",pImage );

imshow("原图", src_mat);
imshow("灰度图", gray_mat);
waitKey();
return 0;

#11


cvsaveimage 是IPlimage指针的函数;
对于 Mat类 ,存储直接用imwrite 函数就行了 
也就是说把cvSaveImage("gray_mat.jgp", gray_mat); 这一个改成imwrite("gray_mat.jgp", gray_mat); 
当然也可以在mat和Iplimage之间进行转换 具体可以百度一下两者的区别

#1


这个应该很明显吧    函数调用的时候实参与形参的类型不符    把gray_mat的类型改为能匹配const CvArr *的类型即可。

#2


引用 1 楼 ganruan 的回复:
这个应该很明显吧    函数调用的时候实参与形参的类型不符    把gray_mat的类型改为能匹配const CvArr *的类型即可。

不是很明白啊,怎么改??? opencv如何将彩色图转换为灰度图并保存灰度图

#3


只有8位单通道或者3通道可以使用这个函数保存,如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换.

#4


引用 3 楼 ganruan 的回复:
只有8位单通道或者3通道可以使用这个函数保存,如果格式,深度或者通道不符合要求,请先用cvCvtScale 和cvCvtColor转换.

我在网上找了好多,全是这个。亲,能给个样例吗?!

#5


用imwrite不行吗

#6


Mat不能直接这样写,要看你的opencv版本,里面对应的图像类型不同

#7


请问楼主这个问题解决了吗?碰到了同样的问题

#8


使用imwrite试试

#9


SaveImage是适用于IplImage的,imwrite应该可以

#10


后五行改为以下:

IplImage* pImage ;
pImage = &IplImage (gray_mat);

cvSaveImage("gray_mat.jgp",pImage );

imshow("原图", src_mat);
imshow("灰度图", gray_mat);
waitKey();
return 0;

#11


cvsaveimage 是IPlimage指针的函数;
对于 Mat类 ,存储直接用imwrite 函数就行了 
也就是说把cvSaveImage("gray_mat.jgp", gray_mat); 这一个改成imwrite("gray_mat.jgp", gray_mat); 
当然也可以在mat和Iplimage之间进行转换 具体可以百度一下两者的区别