图形处理第二讲 OpenCv:图片的读取及图片灰度化

因为之前参加恩智浦的比赛所以没有时间写第二讲,今天抽出了时间写写第二讲,图片的读取及图片灰度化,下一讲会讲比赛用的最广的单目标识别。

图片的读取

  1. ** 在Opencv中有自己的图片读取函数imread(英文:image read),自动将JPG图片读入,输出为Mat形式 注意这里的Mat和数组是有很大区别的,有兴趣的可百度**
  2. ** 所以调用图片之前我们需要先建立一个空Mat来承载图片,然后用imread()函数读取图片。**

imread()函数的说明

** 在OpenCv中的定义为:`

Mat imread( const String& filename, int flags = IMREAD_COLOR );

所以其中有两个输入,1是图片路径,2是图片格式(一般默认即可)

图片的读取程序

程序如图,其中image就是读取的Mat数据,imshow为显示读取的图片

 Mat image;
 image = imread("C:/图像处理/Opencv/frame/123.jpg");
 imshow("原图", image);   //第一个输入为图窗标题,第二个输入为要显示的图片

图片效果

我们找一个图片输入看看实际效果
在这里插入图片描述
成功显示了图窗标题,并且显示了要读取的图片。

Mat image的数据格式

我们成功显示了原图,接下来让我们直观的看看image承载的图片数据是怎么样的。因为矩阵数据过大,所以我截取了一部分

我们可以可以看出图片格式在重复刷新3列数据,这就是说明我们读取的是RGB格式图片,三列数据分别为图像元素点的R,G,B值。在正式图形处理中,这样的图片数据过大,普通主控如STM32,K60,无法快速处理,而我们又无需这样详细的数据,所以随之产生了大量的图像算法。接下来我讲最基础的图形格式转换,灰度图无法处理
** 我们可以看出图窗在重复刷新3列数据,这就是说明我们读取的是RGB格式图片,三列数据分别为图像元素点的R,G,B值。在正式图形处理中,这样的图片数据过大,普通主控如STM32,K60,无法快速处理,而我们又无需这样详细的数据,所以随之产生了大量的图像算法。接下来我讲最基础的图形格式转换,灰度转换**

图片的灰度化

转格式函数说明

** Opencv有自己的图片转格式程序cvtColor()**
程序定义为:

void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );

有四个输入。我们一般只需要前三个即可。
第一个为输入的图片,
第二个为输出图片,
第三个即为颜色映射码,通俗讲就是图片转换方式(可填名称,也可填code值),在OpenCv中有大量的格式转换方式。
如图:
在这里插入图片描述
我们要做RGB图片转灰度,即可使用第7个,RGB2GRAY(英文解释:RGB to GRAY)

第四个参数,dstCn用于指定目标图像的通道数,如果指定的值是默认值0,那么通道数将由输入图像和颜色转换码决定,即无特殊要求,可不填。

图片的灰度化程序

 cvtColor(image, imgGray, CV_RGB2GRAY); //这里的CV_RGB2GRAY可替换为7

程序中的image即为读取的原图(RGB格式);
imgGray即为转换之后的灰度图(单通道灰度形式 UNIT8);
CV_RGB2GRAY 为转换命令RGB to GRAY。

图片效果

先将程序贴出来:

Mat image, imgGray;
image = imread("C:/Users/12725/Desktop/CSDN/视屏处理/第二讲/图片文件/F.jpg");
 if (!image.data)
 {
  cout << "Please input image path" << endl;
  return 0;
 }
imshow("原图", image);
cvtColor(image, imgGray, CV_RGB2GRAY);//灰度化处理
imshow("灰度图", imgGray);

我们将原图和灰度图一起显示,并做对比:
在这里插入图片描述
明显看出图片变得不再鲜艳,灰度化之后的图片整体呈现黑白话,这就说明我们灰度转换成功了。

图片格式

我们将图片中的一部分数据打印出来看一下格式:
在这里插入图片描述
我们对比RGB的矩阵数据,明显发现这个图片的矩阵数据各列都不相同,每个值都代表图片中一个元素点的灰度值,并且各灰度值都是unit8格式的(0~255),灰度化成功。

贴出本文所用的所有程序

int main()
{
	 Mat image, imgGray;
	 image = imread("C:/Users/12725/Desktop/CSDN/视屏处理/第二讲/图片文件/F.jpg");
		 if (!image.data)
		 {
			  cout << "Please input image path" << endl;
			  return 0;
		 }
	 imshow("原图", image);
       //cout << image << endl;//打印读取的原图数据格式(建议注释)
	 cvtColor(image, imgGray, CV_RGB2GRAY);
	 imshow("灰度图", imgGray);
	 //cout << imgGray << endl;//打印读取的原图数据格式(建议注释)
	
		
}
	
	
	```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值