目录
前言
文件结构
示例代码
效果展示
重点讲解
Haar级联分类器(XML)文件的获取
使用的编译环境和工具:Anaconda、Jupyter Notebook
需要安装的库:OpenCV(打开 Anaconda Prompt 终端,输入命令:conda install opencv)
本文只针对Haar级联分类器的调用做示例,故文件结构较为简单。
cat_face(总文件夹) | ||
cat.jpg(测试图片) | haarcascade_frontalcatface.xml (Haar级联分类器) |
cat_face.ipynb (代码文件) |
import cv2
# 加载Haar级联分类器
cat_cascade = cv2.CascadeClassifier('haarcascade_frontalcatface.xml')
# 加载图像
img = cv2.imread('cat.jpg')
# 将图像转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测猫脸
cats = cat_cascade.detectMultiScale(gray, 1.3, 5)
# 在图像中绘制矩形框
for (x, y, w, h) in cats:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 显示图像
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
首先需要讲的是两个地址的问题,我个人习惯于两种地址格式:
①相对路径
代码中所用就是相对路径的形式,我将.xml文件、jpg图片和代码文件放在同一目录下,即可直接按照文件名进行调用。
cat_cascade = cv2.CascadeClassifier('haarcascade_frontalcatface.xml')
img = cv2.imread('cat.jpg')
②绝对路径
这里给出一种绝对路径的获取方式。直接右键点击你的目标文件,选择“复制文件地址”(Ctrl+Shift+C),然后在路径前加上r即可
img = cv2.imread(r'C:\Users\since\Desktop\Jupyter\Object_detection\cat_face\cat.jpg')
不管哪一种方式都是可以运行的。在这里我为了方便项目文件的管理,将所有文件都放在了一起,所以采用第一种方式。
然后需要讲的一点就是当程序运行后会出现一个新的窗口显示图片,这时如果你直接关闭窗口,程序是不会停止的,你需要在图片窗口中按下任意按键,程序就会自己关闭,这是以下代码的功能:
cv2.waitKey(0)
cv2.destroyAllWindows()
直接关闭窗口会导致你的Jupyter Notebook内核一直被占用,无法保存或修改。但如果你不小心确实这么做了,也是有办法的:
一种办法是关闭代码文件回到上级目录,勾选该程序代码选择ShutDown;
另一种办法是在代码文件的上方找到kernel,然后点击Restart;
那么到这里肯定就会问了(包括我自己),这个haarcascade_frontalcatface.xml是怎么来的呢?
实际上,haarcascade_frontalcatface.xml文件是OpenCV中预先训练好的Haar级联分类器之一,用于检测猫脸。Haar级联分类器是一种机器学习算法,用于检测图像中的目标对象。该算法是通过训练一系列弱分类器,并将它们组合成强分类器来实现的。
训练Haar级联分类器需要大量的正负样本,并使用OpenCV中的opencv_createsamples和opencv_traincascade工具进行训练。为了方便用户使用,OpenCV提供了一些预先训练好的Haar级联分类器,包括haarcascade_frontalcatface.xml.
该文件是由OpenCV贡献者使用大量猫的脸部样本进行训练生成的。如果需要使用其他类型的Haar级联分类器,例如检测眼睛或人体,可以使用OpenCV的工具对自己的数据进行训练,以生成新的分类器XML文件。
对于新手来说,使用预先训练好的Haar级联分类器肯定是最方便的。可以按照以下步骤下载XML文件:
这些XML文件是OpenCV开源社区提供的,可以在OpenCV的许可证下自由使用和分发。