学习opencv(二、图像的加载、修改、保存)

一、加载图像(用CV::imread)

为了对图片进行后续操作,我们需要把图片从磁盘中载入,我们要使用函数cv::imread():

cv::imread(const string&filename,//输入图片文件名或地址
int flags=cv::IMREAD_COLOR//设置为怎样去读取该图片文件
)

flags的值可以被设定为下表的任意一个值

标志含义
cv::IMREAD_COLOR总是读取三通道图像
cv::IMREAD_GRAYSCALE总是读取单通道图像
cv::IMREAD_ANYCOLOR通道数为文件实际通道数
cv::IMREAD_ANYDPATH允许加载超j过8bits深度
cv::IMREAD_UNCHANGED具有一个独特的效果

cv::imread()可以读取很多图像格式,包括BMP、DIP、PNG、PBM、JPE等,在载入图像失败时,返回一个空的Mat(可以用Mat.empyt()==true来判断)

二、显示图像(cv::namedwindow和cv::imshow)

1.namedWindow函数的原型为:

 namedWindow(const string& winname,int flags = WINDOW_AUTOSIZE) ;

参数1:新建的窗口的名称。自己随便取。

参数2:窗口的标识,一般默认为WINDOW_AUTOSIZE 。

WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改。
WINDOW_NORMAL 用户可以改变这个窗口大小
WINDOW_OPENGL 窗口创建的时候会支持OpenGL

2.mshow的输入参数如下:

oid cv::imshow	(	const String & 	winname,
InputArray 	mat 
)		

其中第一个参数是窗口的名称,第二个是待显示的图像。该函数将图像在特定的窗口进行显示。如果该窗口是利用cv::WINDOW_AUTOSIZE标志创建的,则会使用图像的原始分辨率进行显示,然而会受限于屏幕的分辨率。也就是如果图像大于屏幕的分辨率,则无法完整的查看了。

二、 修改图像颜色空间(cv::cvtColor)

函数cvtcolor其C++接口为

void cv::cvtColor	(	InputArray 	src,
                         OutputArray 	dst,
                       int 	code, // 颜色映射类型,可以查表得到,有很多
                      int 	dstCn = 0 // 输出的通道数 (0='automatic'),我们可以使用默认值,什么都不写。
                      )	

1.InputArray src: 输入图像即要进行颜色空间变换的原图像,可以是Mat类 。
2.OutputArray dst: 输出图像即进行颜色空间变换后存储图像,也可以Mat类 。
3.int code: 转换的代码或标识,即在此确定将什么制式的图片转换成什么制式的图片。数目有点多,可以去查表
4.int dstCn = 0: 目标图像通道数,如果取值为0,则由src和code决定。

三、保存图像(cv::imwrite)

首先来看看imwrite()函数的具体用法。

  bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>() )

该函数是把程序中的Mat类型的矩阵保存为图像到指定位置。参数filename为所需保存图像的文件目录和文件名。这里的文件名需要带有图像格式后缀的。
第一个参数const String& filename表示需要写入的文件名,必须要加上后缀,比如“123.jpg”。注意:你要保存图片为哪种格式,就带什么后缀。
第二个参数InputArray img表示Mat类型的图像数据。
第三个参数const std::vector& params表示为特定格式保存的参数编码,它有一个默认值std::vector< int >(),所以一般情况下不用写。

四、实例实践

1.图片载入

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

using namespace cv;

int main(int argc, char** argv) {
	Mat src, dst;
	src = imread("D:/vcprojects/images/test.png");
	if (!src.data) {
		printf("could not load image...\n");
		return -1;
	}

2.图片显示

int main(int argc, char** argv) {
	Mat src, dst;
	src = imread("D:/vcprojects/images/test.png");
	if (!src.data) {
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);

3.改变图片色彩空间并保存改变后图片

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

using namespace cv;

int main(int argc,char** argv)
{
	Mat src = imread("D:\\c++代码\\opencv第一课\\zdy.jpg");
	if(src.empty())
	{
		printf("Could not load image...\n");
		return -1;

	}
	namedWindow("test opencv setup",CV_WINDOW_AUTOSIZE);
	imshow("test opencv setup",src);
	namedWindow("output windows",CV_WINDOW_AUTOSIZE);
	Mat output_iamge;
	cvtColor(src,output_iamge,CV_RGB2HLS);
	imshow("output windows",output_iamge);
	imwrite("D:\\c++代码\\opencv第一课\\hlstest.tif",output_iamge);
	waitKey(0);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值