python3.5在jupyter notebook中运行
代码一开始是从https://blog.csdn.net/jesmine_gu/article/details/80987134这篇文章复制的。
import cv2
filename = 'img/Img.jpg'
face_cascade = cv2.CascadeClassifier('cascades/haarcascade_frontalface_default.xml')
img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度图像
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# scaleFactor表示人脸检测过程中每次迭代时图片的压缩率(1.3)
# minNeighbors:每个人脸矩形保留近邻数目的最小值(5)
for (x, y, w, h) in faces:
# 通过坐标绘制矩形,x,y是左上角坐标;w,h分别是宽度和高度
img = cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 其中参数的含义:(255, 0, 0)表示颜色, 2表示线条粗细
cv2.namedWindow('Viking Detected!!')
cv2.imshow('Viking Detected!!', img)
cv2.imwrite('/img/viking.jpg', img)
cv2.waitKey(0)
detect(filename)
但是运行时遇到两个问题:
1.报错:
error: OpenCV(4.1.1) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
2.运行很久,但图片不出来
解决问题1:将haarcascade_frontalface_default.xml下载下来加入目录中,如图:
haarcascade_frontalface_default.xml用来人脸识别,haarcascade_eye.xml用来识别眼睛,运行后没有报错,但是图片不出来,就是问题2,于是我改用了matplotlib作为显示,如下:
import matplotlib.pyplot as plt
import cv2
filename='HTT.jpg'
img = cv2.imread(filename)
image = img[:,:,::-1] # 必须为 ::-1
plt.rcParams['figure.figsize'] = (12.0, 10.0)
plt.imshow(image)
plt.show()
path='haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(path)
face_cascade.load(path)
# 转换为灰度图像
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# scaleFactor表示人脸检测过程中每次迭代时图片的压缩率(1.3)
# minNeighbors:每个人脸矩形保留近邻数目的最小值5
faces=face_cascade.detectMultiScale(gray,scaleFactor=1.5,minNeighbors=5)
for (x,y,h,w) in faces:
img2=cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
img3=img2[:,:,::-1]
plt.rcParams['figure.figsize'] = (12.0, 10.0)
plt.imshow(img3)
plt.show()
cv2.imwrite('faces.jpg',img3)
输出结果如下: