日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
import cv2
import os
"""
报错:error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
解决1:opencv读取的文件路径错误,或者读取的文件不在指定的路径下
解决2:opencv读取的文件路径不能有中文
"""
#读取一张图片
img = cv2.imread('./data/1.jpg')
#将图片转化成灰度 COLOR_BGR2GRAY
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#一定要告诉编译器文件所在的具体位置
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
# 此文件是opencv的haar人脸特征分类器
face_cascade.load('haarcascade_frontalface_alt2.xml')
"""
def detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None):
image:待检测图片,一般为灰度图像加快检测速度;
scaleFactor:表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
minNeighbors:
表示构成检测目标的相邻矩形的最小个数(默认为3个)。
如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。
如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
这种设定值一般用在用户自定义对检测结果的组合程序上;
flags:
要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为
CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,
因此这些区域通常不会是人脸所在区域;
minSize和maxSize用来限制得到的目标区域的范围。
"""
#人脸检测使用的是 detectMultiScale函数。
# 它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
# 在脸部周围绘制边界框:cv2.rectangle(frame, (startX, startY), (endX, endY), color, 2)
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),5)
cv2.imshow('img',img)
# cv2.imwirte('result/' + img,img)
cv2.waitKey()
import cv2
import os
datpath = 'data/'
# img = cv2.imread('1.jpg')
# gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#一定要告诉编译器文件所在的具体位置
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt2.xml")
# 此文件是opencv的haar人脸特征分类器
face_cascade.load("haarcascade_frontalface_alt2.xml")
# 遍历该路径下的每一个文件
for img in os.listdir(datpath):
# 读取该路径下的每一张图片
frame = cv2.imread(datpath+img)
# 将其转换为灰度
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
"""
def detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None):
image:待检测图片,一般为灰度图像加快检测速度;
scaleFactor:表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
minNeighbors:
表示构成检测目标的相邻矩形的最小个数(默认为3个)。
如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。
如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
这种设定值一般用在用户自定义对检测结果的组合程序上;
flags:
要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为
CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,
因此这些区域通常不会是人脸所在区域;
minSize和maxSize用来限制得到的目标区域的范围。
"""
# 人脸检测使用的是 detectMultiScale函数。
# 它可以检测出图片中所有的人脸,并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用
faces = face_cascade.detectMultiScale(gray,1.3,5)
for(x,y,w,h) in faces:
# 在脸部周围绘制边界框:cv2.rectangle(frame, (startX, startY), (endX, endY), color, 2)
frame = cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
cv2.imwrite('result/'+img,frame)
# cv2.imshow('img',img)
# cv2.waitKey()