opencv学习-001-图像读取与显示(imread、imshow,nameWindow,Mat类)

opencv学习-001-图像读取与显示(imread、imshow,nameWindow,Mat类)

这一节是图像的读取和显示,先上代码和结果,再解释其中重要部分:

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

using namespace cv;
using namespace std;

const char* winTitle = "input image";

int main(int argc, char** argv) {
	//Mat src = imread("E:/Desktop/y.jpg");
	Mat src = imread("E:/Desktop/y.jpg", IMREAD_GRAYSCALE);

	if (src.empty()) {
		printf("could not load image...\n");
		return -1;
	}
	namedWindow(winTitle, WINDOW_AUTOSIZE);
	imshow(winTitle, src);

	waitKey(0);
	return 0;
}

在这里插入图片描述
由结果可以看出,我们把读取的图片的黑白形式(我这张图原图是一个具有色彩的猫)给显示了出来。

1. imread函数:

   Mat imread(const String& filename,int flags = IMREAD_COLOR);
 
    返回Mat对象;
  • 参数filename:
    待打开图片的绝对地址,需要注意的是,并不是所有文件都可以用它打开,它支持的文件如下;函数识别不是依靠文件的后缀名,而是依靠内容的编码格式;
  • 参数flags:打开的参数,这个非常重要,因为如果设置不合适的话,很容易出现预想之外的效果。它可以将原图读取时进行一定的转换,比如我例子中读取的时候让他灰度化了。默认值是IMREAD_LOAD_GDAL。因此,如果是想直接处理原图,应该设置为IMREAD_UNCHANED

下面是flags的官网的翻译:

Imread flags

enum ImreadModel{
IMREAD_UNCHANGED=1,				//读取原图不做任何修改,有alpha通道就读取,无alpha通道那么图片会被省略
IMREAD_GRAYSCALE=0,   	 		//图图像转化为单通道的灰度图像;
IMREAD_COLOR=1,    				//转化为3通道的BGR图像imread函数默认情况下参数就为这个;
IMREAD_ANYDEPTH=2,				//当传入的图像有颜色的深度时,返回16为或32位的图像,否则返回8位;
IMREAD_ANYCOLOR=4,   			//以任意可能的颜色形式读取图像;
IMREAD_LOAD_GDAL=8,    			//使用GDAL驱动去读取图像;
IMREAD_REDUCED_GRAYSCALE_2=16,  //把图像转化为单通道的灰色图片,并且原有尺寸减少1/2;
IMREAD_REDUCED_COLOR_2=17,    	//把图片转化为3通道的RGB,并且把原图尺寸减少1/2;
IMREAD_REDUCED_GRAYSCALE_4=32,  //把图片转化为单通道的BGR图片,并且原尺寸减少1/4;
IMREAD_REDUCED_COLOR_4=33,    	//把图片转化为3通道的RGB,并且把原图尺寸减少1/4;
IMREAD_REDUCED_GRAYSCALE_8=64,  //把图片转化为单通道的BGR图片,并且原尺寸减少1/8;
IMREAD_REDUCED_COLOR_8=65,    	//把图片转化为3通道的RGB,并且把原图尺寸减少1/8;
IMREAD_IGNORE_ORIENTATION=128   //不因EXIF's方向标志而转化图像的坐标
};

2. imshow函数:

void cv::imshow (const String& winname,Mat InputArray)   
  • 没有返回值
  • 参数1, 显示的窗口名, 可以使用cv::namedWindow函数创建窗口,如不创建,imshow函数将自动创建。
  • 需要显示的图像

3. nameWindow函数

void nameWindow(const string* winname,int flags = WINDOW_AUTOSIZE) ;
  • 参数1:新建的窗口的名称。自己随便取。
  • 参数2:窗口的标识,一般默认为WINDOW_AUTOSIZE

WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改。

WINDOW_NORMAL 用户可以改变这个窗口大小(可手动拉伸)

WINDOW_OPENGL 窗口创建的时候会支持OpenGL

如果imshow函数前没有namedWindow函数则自动执行一个,但是该函数默认创建窗口的参数为WINDOW_AUTOSIZE

4. Mat

  以上最重要的一点,就是我们注意到imread的返回值是个Mat类型的数据结构,Mat是一个初学者学习起来比较抽象的概念,它是用来代表任意维度的包含任意基础元素的稠密数组(“稠密”表示该数组的所有部分都有一个值存储),因为图片可以看成是个二维数组,则它一般都用来存放图片。

  这个数据结构非常重要,但是我仅在这里简要提到,因为后续的学习都需要用到,而且我写这类博客的目的是在于运用,如果读者有兴趣想要深入了解,去官网或者推荐一本书《学习OpenCV3中文版》安德里安·凯勒和加里·布拉德斯基著这本书第四章,对cv::Matcv::SparesMat有详细的介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值