人脸识别 openCV解决遇到的两个问题

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)

输出结果如下:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值