【OpenCV学习笔记01】 您所在的位置:网站首页 imread第二个参数 【OpenCV学习笔记01】

【OpenCV学习笔记01】

2023-02-22 09:59| 来源: 网络整理| 查看: 265

想要使用opencv实现人脸识别,我们需要做这样几步:

1.opencv-python的安装

这里我们使用的python的opencv-python库,在安装opencv-python库之前,我们需要安装numpy, matplotlib。

# 安装指令 # 安装 numpy pip install numpy # 安装 matplotlib pip install matplotlib # 安装 opencv pip install opencv 2.opencv的简单使用

Opencv能完成以下从加载图像到调整大小等基本操作:

使用OpenCV加载图片查看图片形状/分辨率显示图片调整图像大小 2.1 使用OpenCV加载图片 # 引用 opencv import cv2 # 加载图片,使用一个参数加载图片,这里注意了图片路径必须为英文 img = cv2.imread("图片路径")

加载图片还有第二个参数

# 引用 opencv import cv2 # 加载彩色图片 img = cv2.imread("图片路径", 1) # 引用 opencv import cv2 # 加载黑白图片 img = cv2.imread("图片路径", 0) 2.2 查看图片形状/分辨率 # 引用 opencv import cv2 # 加载图片,使用一个参数加载图片 img = cv2.imread("图片路径") print(img.shape) 2.3 显示图片 # 引用 opencv import cv2 # 加载图片,使用一个参数加载图片 img = cv2.imread("图片路径") # imshow的第一个参数是展示出来图片的标题,第二个参数就是我们加载的图片 cv2.imshow("image", img) # waitKey使窗口保持静态直到用户按下一个键,传入的参数单位是毫秒 # 当设置的值为0的时候,则代表一直等待 cv2.waitKey(0) # destroyAllWindows 函数:销毁所有展示的窗口 cv2.destroyAllWindows() 2.4 调整图像大小 import cv2 # 加载图片,使用一个参数加载图片 img = cv2.imread("图片路径") # 只调整图片尺寸,图片会压缩 resized_image = cv2.resize(img, (650, 500)) cv2.imshow("resized_image: ", resized_image) cv2.waitKey(0) cv2.destroyAllWindows() 3.人脸识别特征文件准备

github网站下载开源人脸特征数据 opencv-github地址 我们使用的是基于 Haar 特征的 cascade 分类器做人脸识别;

3.1 找到图片中的人脸数据

我们先通过人脸特征数据检测出图片中的人脸数据 我使用的图片是: 在这里插入图片描述 网上找到

# 引用 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]] 3.2 在原图画出检测出的人脸

在图片中把检测出来的人脸画出来

# 引用 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()

输出的结果如下: 在这里插入图片描述

3.3 在原图画出检测出的人脸,精度识别

这里我们会发现上面输出的结果有很多干扰项,我们可以通过设置精度进行调优,不过这中间没办法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 2018-2019 实验室设备网 版权所有