如果dilb和face_recognition第三方包安装失败,请移步到Python 解决dilb和face_recognition第三方包安装失败_水w的博客-CSDN博客
目录
一、环境配置
二、前期知识
1 读取图片
2 灰度转换
解决报错cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
3 修改尺寸
4 绘制矩形
5 人脸检测
一、环境配置
pycharm中,如果要安装cv2,就需要安装opencv-python库,这个库并不是自带的,所以我们要pip一下。注意不要写成opencv!它还会自己安装另一个依赖库,
pip install opencv-python
注意:import时就不是opencv-python或者opencv了,要用cv2了!
import cv2
二、前期知识
dlib支持检测人脸特征关键点,官方提供了68维度和5维度的人脸关键店检测预训练模型提供下载使用。
相关数据与模型文件下载地址:Index of /files
1 读取图片
想要处理图片,就得先要读取图片,光读取不行,还得把图片显示出来。
整个代码如下:
# 导入cv模块
import cv2 as cv
# 读取图片
img = cv.imread('face4.jpg')
# 显示图片
cv.imshow('read_img', img)
# 为了防止自动退出(pycharm可能会发生),所以可以在代码后面加入:等待
cv.waitKey(0)
# 释放内存
cv.destroyAllWindows()
效果如下:
2 灰度转换
在图像预处理中,图像的灰度变换是图像增强的重要手段,灰度变换可以使图像对比度扩展,图像清晰,特征明显,灰度变换主要利用点运算来修正像素灰度,由输入像素点的灰度值确定相应输出点的灰度值,是一种基于图像变换的操作。
在数字图像中,像素是基本的表示单位,各个像素的亮安程度用灰度值来标识,只含亮度信息,不含色彩信息的图像称为灰度图像,对于单色图像,它的每个像素的灰度值用【0,255】区间的整数表示,即图像分为256个灰度等级,对于彩色图像,他的每个像素由R,G,B三个单色调配而成,如果每个像素的R,G,B完全相同,也就是R=G=B=D,该图像就是灰度图像,其中D被称为各个像素的灰度值。
整个代码如下:
# 导入cv模块
import cv2 as cv
# 读取图片
img = cv.imread('face1.jpg')
# 灰度转换
gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 显示灰度图片
cv.imshow('gray', gray_img)
# 保存灰度图片
cv.imwrite('gray_face11.jpg', gray_img)
# 显示图片
cv.imshow('read_img', img)
# 等待
cv.waitKey(0)
# 释放内存
cv.destroyAllWindows()
解决报错cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
报错:
我发现代码报错,代码检查过,没有问题,这是怎么回事?
原因:这可能是因为你的路径中有中文,opencv的致命弱点:路径不能有中文!
解决方法:
(1)重新新建路径中没有中文的新文件夹,重新运行代码,但是还是报错了。
(2)已经修改了路径中没有中文,但是还是显示不出来。
这就比较少见,可能是因为图片格式比较冷门,或者是错误的,所以无法显示。--》换一张图片
成功了,效果如下:
3 修改尺寸
整个代码如下:
# 导入cv模块
import cv2 as cv
# 读取图片
img = cv.imread('face4.jpg')
# 修改尺寸
resize_img = cv.resize(img, dsize=(200, 200))
# 显示原图
cv.imshow('img', img)
# 显示修改后的
cv.imshow('resize_img', resize_img)
# 打印原图尺寸大小
print('未修改:', img.shape)
# 打印修改后的大小
print('修改后:', resize_img.shape)
# 等待
while True:
if ord('q') == cv.waitKey(0):
break
# 释放内存
cv.destroyAllWindows()
效果如下:
4 绘制矩形
整个代码如下:
# 导入cv模块
import cv2 as cv
# 读取图片
img = cv.imread('face4.jpg')
# 坐标
x, y, w, h = 100, 100, 100, 100
# 绘制矩形
cv.rectangle(img, (x, y, x + w, y + h), color=(0, 0, 255), thickness=1)
# 绘制圆形
cv.circle(img, center=(x + w, y + h), radius=100, color=(255, 0, 0), thickness=5)
# 显示
cv.imshow('re_img', img)
while True:
if ord('q') == cv.waitKey(0):
break
# 释放内存
cv.destroyAllWindows()
效果如下:
5 人脸检测
(1)首先,需要找到我们需要用到的haarcascade_frontalface_alt2.xml,位置是在Python的环境/虚拟环境下的lib/site-packages/的cv2/data/下。
此处我的路径是D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml
整个代码如下:
# 导入cv模块
import cv2 as cv
# 检测函数
def face_detect_demo():
gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
face_detect = cv.CascadeClassifier('D:/my/python-pycharm/python-envs/venv-deep/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
face = face_detect.detectMultiScale(gary, 1.01, 5, 0, (100, 100), (300, 300))
for x, y, w, h in face:
cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
cv.imshow('result', img)
# 读取图像
img = cv.imread('face4.jpg')
# 检测函数
face_detect_demo()
# 等待
while True:
if ord('q') == cv.waitKey(0):
break
# 释放内存
cv.destroyAllWindows()
效果如下: