木瓜子 2020-02-26
OpenCV
是一个基于BSD许可(开源)发行的跨平台计算机视觉库
为什么有OpenCV? 计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:
1、研究代码(慢,不稳定,独立并与其他库不兼容)
2、耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)
3、依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。
OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated
Performance
Primitives)得到更快的处理速度。右图为OpenCV与当前其他主流视觉函数库的性能比较。
-------百度百科所以说opencv就是做图像处理的,而我们要实现的人脸识别,
OpenCV
库是必不可少的。
原理:opencv是以图片中心为初始点,以一个缩放因子进行慢慢的缩放,在范围内进行识别,缩放因子必须适宜,太大可能会导致识别不出来
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
opencv的引入不是直接引入opencv,而是引入cv2
import cv2
my = cv2.imread('img/my.jpg') face_detector = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml") faces = face_detector.detectMultiScale(my) for x,y,w,h in faces: cv2.rectangle(my,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,225],thickness=2) cv2.imshow("my",my) cv2.waitKey(0) cv2.destroyAllWindows()
注意: haarcascade_frontalface_alt.xml文件时python安装目录下Lib\site - packages\cv2\data,需要将该文件复制到项目内,不复制的话需要绝对路径。
问题:
描述:当图片太大或者分辨过高时,可能会遇到只能显示图片的部分
解决:加入代码my = cv2.resize(my,None,fx=0.5,fy=0.5)
或者cv2.namedWindow(‘my‘, cv2.WINDOW_NORMAL)
不过有其他显示问题,可能会导致图片显示变形
my = cv2.imread('img/my.jpg') my = cv2.resize(my,None,fx=0.5,fy=0.5) # 人脸特征数据的数据包 face_detector = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml") # 图片进行人脸数据对比 # scaleFactor:缩放因子,默认1.3, # minNeighbors:最小邻居,默认为3 faces = face_detector.detectMultiScale(my) # print(faces) for x,y,w,h in faces: # pt1:人脸左上角点 # pt2:人脸右下角点 cv2.rectangle(my,pt1=(x,y),pt2=(x+w,y+h),color=[0,0,225],thickness=2) # cv2.namedWindow('my', cv2.WINDOW_NORMAL) cv2.imshow("my",my) cv2.waitKey(0) cv2.destroyAllWindows()