加载、修改、保存图像

加载、修改、保存图像

加载图像(用cv::imread)

imread 在不填参数时,默认为RGB图。
放回为一个Mat类型的值

判断图像是否加载成功
Mat src = imread("图片");
if(src.empty())
{
     printf("error read\n");
}
或者
if(!src.data)
{
     printf("error read\n");
}


显示图像(cv::namedwindow 与  cv:: imshow)

有imshow一定要有namedwindow!namedwindow不是多余的!
    namedWindow函数的作用是,通过指定的名字,创建一个可以作为图像和进度条的容器。它是由opencv自动            创建与释放,你无需去销毁它。
    imshow 函数详解:imshow 函数用于在指定的窗口中显示图像。
    通俗地讲,namedWindow是一容器,放imshow的图片,如果没有容器,相关控件可能出不来。

Mat src = imread("picture.bmp");
namedwindow("窗口名称",WINDOW_AUTOSIZE);
imshow("窗口名称",src);
窗口名称必须保持一致才能将imshow的图片放到namedwindow创建的窗口里。


修改图像的通道(cv::cvtColor)
convertTo()函数负责转换数据类型不同的Mat,即可以将类似float型的Mat转换到imwrite()函数能够接受的类型。
而cvtColor()函数是负责转换不同通道的Mat,因为该函数的第4个参数就可以设置目的Mat数据的通道数

void cvCvtColor( const CvArr* src, CvArr* dst, int code );
src
输入的 8-bit,16-bit或 32-bit单倍精度浮点数影像。表示源图像。
dst
输出的8-bit, 16-bit或 32-bit单倍精度浮点数影像。表示色彩空间转换之后的图像。
code
色彩空间转换的模式,该code来实现不同类型的颜色空间转换。
比如CV_BGR2GRAY表示转换为灰度图.其中当code选用CV_BGR2GRAY时,dst需要是单通道图片
       CV_BGR2HSV将图片从RGB空间转换为HSV空间。当code选用CV_BGR2HSV时,对于8位图,需要将RGB值归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。

修改图像的数据类型(cv::convertTo)


格式:CV_ [每一项的位数] [有符号或无符号] [类型前缀] C [通道数]



保存图像(cv::imwrite)
另外也可以不用imwrite()函数来存图片数据,可以直接用通用的XML IO接口函数将数据存在XML或者YXML中。
注意也不是所有格式的Mat型数据都能被使用保存为图片,目前OpenCV主要只支持单通道和3通道的图像,并且此时要求其深度为8bit和16bit无符号(即CV_16U),所以其他一些数据类型是不支持的,比如说float型等。
如果Mat类型数据的深度和通道数不满足上面的要求,则需要使用convertTo()函数和cvtColor()函数来进行转换

第一个参数可以决定输出的格式以及保存的路径,如果只是填图片名及其格式,将保存在工程目录下。 
第二个参数为要保存的Mat类图片。

代码示例如下

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main()
{
	Mat src = imread("liaowenbin.bmp");
	if (src.empty())
	{
		printf("could not load image...\n");
		return - 1;
	}
	
	//namedWindow和imshow相随相伴,永不分离
	namedWindow("test opencv setup",CV_WINDOW_AUTOSIZE);
	imshow("test opencv setup",src);

	namedWindow("output window",CV_WINDOW_AUTOSIZE);
	Mat output_image;
	
	//颜色空间转换
	cvtColor(src,output_image,COLOR_BGR2HLS);
    imshow("output window",output_image);
	imwrite("output_image.bmp",output_image);
	
	waitKey(0);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玖零猴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值