人脸检测+识别---02灰度转换+03修改尺寸(OpenCV+PyCharm适用于高中信息技术新教材)持续更新中……

02灰度转换

读取图片之后,首先需要将图片灰度化,代码如下,详解见注释。
在工程OpenCV中新建一个"02灰度转换.py"文件

import cv2                              		#导入opencv库
img=cv2.imread("./images/dehua.jpg")    		#读取图片文件dehua.jpg(文件名不能有中文),存入img
cv2.imshow("ReadImg",img)               		#显示图片img,第一个参数即Windows窗口标题栏的值,第二参数即要显示的图片(已读入)
gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)	#将图片img,以cv2.COLOR_BGR2GRAY的颜色方式转换(BRG 至 GRAY)
cv2.imshow("gray_img1",gray_img)         		#显示图片gray_img
cv2.imwrite("gray1.jpg",gray_img)				#将图片gray_img保存至文件gray.jpg,位置与02灰度转换.py同目录	
cv2.waitKey(0)                         			#等待,参数0即一直等待;参数1000即等待1秒
cv2.destroyAllWindows()                			#释放内存

其中cv2.COLOR_BGR2GRAY意为图片的颜色从BGR(蓝绿红) 转换至 GRAY(灰度)。
图片的颜色不都是RGB吗?怎么这里是BGR呢?事后查了一下,其实也有cv2.COLOR_RGB2GRAY的。
这两个有什么区别呢?

首先BGR2GRAY将原图按如下计算公式转换为灰度图,计算公式为Gray = 0.1140B + 0.5870G + 0.2989*R(其中B G R 就是某个像素点的蓝绿红值),若像素点的蓝绿红值为(157 183 220 ),则Gray=0.1140 * 157 + 0.5870 * 183 + 0.2989 * 220 ≈ 191

其次RGB2GRAY的计算公式为Gray = 0.1140R + 0.5870G + 0.2989*B,与BGR2GRAY相比,转换的系数一致,不同的是系数后紧跟的蓝绿红的顺序变化了,由BGB变为RGB。
还是前面的例子,则Gray=0.1140 * 220 + 0.5870 * 183 + 0.2989 * 157 ≈ 179

讲解就到这样,其他的就留给有兴趣同学自己探究了。

03修改尺寸

修改图片的尺寸比较简单,代码如下:

import cv2                              	#导入opencv库
img=cv2.imread("./images/dehua.jpg")    	#读取图片文件dehua.jpg(文件名不能有中文),存入img
resize_img=cv2.resize(img,dsize=(200,200)) 	#修改读入的图片img,大小改为200*200,存入resize_img
cv2.imshow("ReadImg",img)               	#显示图片img
cv2.imshow("ResizeImg",resize_img)      	#显示图片resize_img
print("未修改",img.shape)                	#输出img的尺寸+通道数(RGB)
print("修改后",resize_img.shape)         	#输出reszie_img的尺寸+通道数(RGB)

while True:                            	 	#如果按下小写字母键"q",则结束循环
    if cv2.waitKey() == ord("q"):       	#否则一直循环,即等待
        break
cv2.destroyAllWindows()                 #释放内存

有三点需要说明:
第一、两句print,请大家观察输出的结果,留一个小问题可尝试自行探究,img.shape和resize_img.shape的数据类型是什么?
第二、留意While True循环,这个循环条件为始终为真,如何退出循环呢?答案即break;
第三、cv2.waitKey()若无参加,即等待从键盘上按下一个键,若按下的是小写"q",则需要判断是否和"q"的ASCII码ord(“q”)相等;若参数是0,即cv2.waitKey(0),则一直等待,直到从键盘上按下任意键;若参数是整数,即cv2.waitKey(1000),则等待1秒。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值