赞
踩
学习笔记:
学习笔记目录里面会收录我关于OpenCV系列学习笔记博文,大家如果有什么不懂的可以通过阅读我的学习笔记进行学习。
【OpenCV学习笔记】- 学习笔记目录
这里我们使用的python的opencv-python库,在安装opencv-python库之前,我们需要安装numpy, matplotlib。
# 安装指令
# 安装 numpy
pip install numpy
# 安装 matplotlib
pip install matplotlib
# 安装 opencv
pip install opencv
Opencv能完成以下从加载图像到调整大小等基本操作:
# 引用 opencv
import cv2
# 加载图片,使用一个参数加载图片,这里注意了图片路径必须为英文
img = cv2.imread("图片路径")
加载图片还有第二个参数
# 引用 opencv
import cv2
# 加载彩色图片
img = cv2.imread("图片路径", 1)
# 引用 opencv
import cv2
# 加载黑白图片
img = cv2.imread("图片路径", 0)
# 引用 opencv
import cv2
# 加载图片,使用一个参数加载图片
img = cv2.imread("图片路径")
print(img.shape)
# 引用 opencv
import cv2
# 加载图片,使用一个参数加载图片
img = cv2.imread("图片路径")
# imshow的第一个参数是展示出来图片的标题,第二个参数就是我们加载的图片
cv2.imshow("image", img)
# waitKey使窗口保持静态直到用户按下一个键,传入的参数单位是毫秒
# 当设置的值为0的时候,则代表一直等待
cv2.waitKey(0)
# destroyAllWindows 函数:销毁所有展示的窗口
cv2.destroyAllWindows()
import cv2
# 加载图片,使用一个参数加载图片
img = cv2.imread("图片路径")
# 只调整图片尺寸,图片会压缩
resized_image = cv2.resize(img, (650, 500))
cv2.imshow("resized_image: ", resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
github网站下载开源人脸特征数据 opencv-github地址
我们使用的是基于 Haar 特征的 cascade 分类器做人脸识别;
我们先通过人脸特征数据检测出图片中的人脸数据
我使用的图片是:
网上找到
# 引用 opencv import cv2 # 加载图片,使用一个参数加载图片 img = cv2.imread("./img_3.png") # 加载人脸特征数据文件 # CascadeClassifier是opencv下objdetect模块中用来做目标检测的级联分类器的一个类。传入人脸特征数据,返回识别出的人脸对象。 face_cascade = cv2.CascadeClassifier("./haarcascade_frontalface_default.xml") # 使用detectMultiScale()接收返回检测出的人脸对象 faces = face_cascade.detectMultiScale(img) # 打印检测出的人脸数据 print(faces) cv2.imshow("image", img) cv2.waitKey(0) cv2.destroyAllWindows()
打印出的数据
[[292 79 41 41] [438 81 41 41] [609 103 36 36] [749 96 38 38] [232 204 42 42] [392 72 58 58] [465 190 50 50] [404 298 49 49] [ 84 291 41 41] [757 308 41 41] [315 168 39 39] [568 302 41 41] [103 176 43 43] [370 377 53 53] [684 395 50 50] [234 373 49 49] [105 425 54 54] [537 383 51 51] [537 412 57 57] [264 474 49 49] [464 449 51 51] [662 468 46 46] [ 13 442 60 60] [603 585 36 36] [356 762 50 50]]
在图片中把检测出来的人脸画出来
# 引用 opencv import cv2 # 加载图片,使用一个参数加载图片 img = cv2.imread("./img_3.png") # 加载人脸特征数据文件 # CascadeClassifier是opencv下objdetect模块中用来做目标检测的级联分类器的一个类。传入人脸特征数据,返回识别出的人脸对象。 face_cascade = cv2.CascadeClassifier("./haarcascade_frontalface_default.xml") # 使用detectMultiScale()接收返回检测出的人脸对象 faces = face_cascade.detectMultiScale(img) # print(faces) # 通过 rectangle 画出检测出的人脸 for x, y, w, h in faces: cv2.rectangle(img, pt1=(x, y), pt2=(x + w, y + h), color=(0, 255, 0)) cv2.imshow("image", img) cv2.waitKey(0) cv2.destroyAllWindows()
输出的结果如下:
这里我们会发现上面输出的结果有很多干扰项,我们可以通过设置精度进行调优,不过这中间没办法100%的命中每个人脸。
# 引用 opencv import cv2 # 加载图片,使用一个参数加载图片 img = cv2.imread("./images/learn1/data/img_3.png") # 加载人脸特征数据文件 # CascadeClassifier是opencv下objdetect模块中用来做目标检测的级联分类器的一个类。传入人脸特征数据,返回识别出的人脸对象。 face_cascade = cv2.CascadeClassifier("./haarcascades/haarcascade_frontalface_default.xml") # 使用detectMultiScale()接收返回检测出的人脸对象 # 简单识别人脸 # faces = face_cascade.detectMultiScale(img) # 提升精度识别人脸 # scaleFactor表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%,此处调整为1.3。 # minNeighbors表示构成检测目标的相邻矩形的最小个数(默认为3个)。该参数指定每一个候选矩形边界框需要有多少相邻的检测点,此处调整为5。 faces = face_cascade.detectMultiScale(img, scaleFactor=1.3, minNeighbors=5) # print(faces) # 通过 rectangle 画出检测出的人脸 for x, y, w, h in faces: cv2.rectangle(img, pt1=(x, y), pt2=(x + w, y + h), color=(0, 255, 0)) cv2.imshow("image", img) cv2.waitKey(0) cv2.destroyAllWindows()
通过调整精度之后,虽然命中的都是人脸,但是有部分人脸没有识别到。
好吧,我暂时能做到的只有这种程度,如果再精确的命中人脸,我还需要努力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。