OpenCV学习(2021.10.10)
01
刚刚结束今日份的学习任务,心情还不错。古人言“好记性不如烂笔头”,于是乎,小陈决定把今日份的学习任务部分整理出来和小可爱们分享分享。正所谓“独乐乐不如众乐乐”,一起来瞧瞧吧!嘻嘻
看了看自己的进度,文献笔记暂时是无法分享了,因为我还没看完。o(╥﹏╥)o。但是但是,我还有别的学习任务可以分享,是关于计算机视觉和图像处理方面的内容。
话不多说,进入正题!
02
首先,简要阐述一下自己的学习内容。
(1)OpenCV安装
(2)opencv库的基础操作
(3)键盘响应
(4)修改图片尺寸
(5)人脸识别小程序开发
其次,开始对学习内容逐点进行展开陈述。
1.OpenCV模块的安装
众所周知,用pip工具安装第三方模块时,经常会出现一些错误,常见错误的有响应超时、版本不匹配等。而针对网络超时错误,下载镜像文件是个超级nice的选择。于是乎,下方,我给出了两种下载方式,供大家参考!
#方法一
# python -m pip install opencv-python
#方法二(镜像)
# python -m pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
2.OpenCV模块的基础操作
不难想象,第三方模块OpenCV安装好之后,我们就可以开始进行一些基础操作的学习啦!主要的基础操作有图像载入、图像模式转换、图像保存、图像显示等。
在这里提示一点:实现OpenCV模块的基础操作的前提是导入OpenCV模块。不止这个模块,其余模块的实现也都需要提前进行导入操作。
#opencv库的基础操作# import cv2#导入OpenCV模块# img = cv2.imread(r'D:\\OpenCV\\image.jpg',0)#以灰度模式读取指定路径下的图片# print(img)# print(img.shape)# cv2.imwrite(r'D:\\OpenCV\\img.jpg',img)#将图片保存到指定路径下# cv2.imshow('chen',img)#在特定窗口中显示图片# cv2.waitKey(0)#解决图片显示闪退问题,参数0表示持续等待键盘响应,也可省略
3.键盘响应
这一部分的内容,是对上一部分知识的回顾。主要是考察waitKey()方法的作用和实现。话不多说,直接看代码!
#键盘响应
# import cv2
# img = cv2.imread(r'D:\\OpenCV\\image.jpg',0)
# cv2.imshow('chen',img)
# k = cv2.waitKey(0)#持续等待,也可以设置具体等待时间,毫秒为单位
# if k == 27:#ESC的ASCII码值
# cv2.destroyWindow('chen')#按下ESC键,关闭显示图像的窗口(也可以使用cv2.destroyAllWindows()方法关闭图像显示的窗口)
# elif k == 83:#S的ASCII码值
# cv2.imwrite(r'D:\\OpenCV\\chen.jpg',img)#将图片保存到指定路径下
# cv2.destroyWindow('chen')#按下S键,关闭显示图像的窗口
4.修改图片尺寸
这一部分内容,算是基础操作的扩展部分。新增的知识点是图像尺寸的修改方法resize(),把握住相关参数的含义,掌握难度不算很大!
#修改图片尺寸# import cv2# img = cv2.imread(r'D:\\OpenCV\\image.jpg',0)# print(img.shape)# resized_img = cv2.resize(img,(int(img.shape[1]//4),int(img.shape[0]//4)))#等比例缩放1/4# #resized_img = cv2.resize(img,(200,200))# print(resized_img.shape)# cv2.imshow('chen',resized_img)# cv2.waitKey()
5.人脸识别小程序开发
这一部分是比较重要的内容。可以说是一个简易人脸识别的实现框架。其中的知识点也在前面几部分的基础上做了比较深入的拓展,主要包括分类器的构建、图像探测比例、以及认证指标等。
在这里提示:分类器的构建,需要有经过大数据训练的数据集做数据支撑。鉴于小陈刚开始接触这一方面的内容,所以采取了OpenCV自带的人脸识别特征数据集。至于如何找到默认数据集以及具体的操作步骤如何,不在此阐述,详情参考小陈的学习笔记。
#人脸识别小程序开发
# import cv2
# img = cv2.imread(r'D:\\OpenCV\\img.jpg')#载入需要进行人脸识别的图片
# resized_img = cv2.resize(img,(int(img.shape[1]//4),int(img.shape[0]//4)))#为使得人脸位置精确定位,原图像也要和处理图像缩放至同样大小
# #因为后续需要在原图像上标注人脸位置,所以需要将原图像保留;并且原图转换得到灰度模式好的图像,进行后续识别处理。
# gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# #考虑到原图像的尺寸太大,为观察后续整体效果,选择进行一定的尺寸缩放
# resized_gray = cv2.resize(gray,(int(gray.shape[1]//4),int(gray.shape[0]//4)))
# #创建级联分类器(选用的是OpenCV自带的人脸特征识别数据集)
# face_cascade = cv2.CascadeClassifier\
# (r'D:\\OpenCV\\opencv-4.5.3\\opencv-4.5.3\\data\\haarcascades\\haarcascade_frontalface_default.xml')
# #scaleFactor参数表示每次图像缩小的比例;#minNeighbors参数表示每一个目标至少要被检测到多少次,才可以认为是真正的目标
# faces = face_cascade.detectMultiScale(resized_gray,scaleFactor=1.2,minNeighbors=5)
# for x,y,w,h in faces:
# img = cv2.rectangle(resized_img,(x,y),(x+w,y+h),(0,255,0),3)#在人脸位置画上矩形方框,并且设置方框的颜色、边框粗细
# cv2.imshow('chen',img)
# cv2.waitKey()
03
写在最后,鉴于文案的篇幅以及整体的排版。小陈只是从整体上对相关学习内容进行了梳理,其中,有些细节问题没有详细展开。但是小可爱们不要慌,小陈的学习笔记很详细,可以后续进行参考!