脸部检测是基于图像的明暗变化模式进行判断,需要将图像先进行灰度化处理
马赛克处理需先将图像缩小然后夸大回原尺寸。
保存训练好的算法用joblib
进行以下操作时已经使用cv2.cvtColor()完成了灰度化
图像平滑化(模糊处理):cv2中的函数
cv2.blur()
cv2.medianBlur()
cv2.bilateralFilter()
cv2.GaussianBlur()
#cv2.GaussianBlur()的格式为
img=cv2.GaussianBlur(img,(ax,ay),sigma_x)
(ax,ay)为以像素为单位指定平滑化对象点的邻近范围大小,数值必须是奇数。sigma
_x是横向的标准偏差值,如果为0,则自动根据核的尺寸(即前面的ax,ay)进行计算
图像二值化(阈值处理):
ret,img = cv2.threshold(img,thresh,maxval,type)
img为灰度化后的图像,thresh指定阈值,maxval指定的是超出阈值时所赋予的值,第四个参数设置如何进行阈值处理,指定为THRESH_BINARY_INV时,大于阈值设为0,其他均设为maxval设定的数值。
轮廓检测函数
contours,hierachy = cv2.findContours(img,mode,method)
第一项参数是输入的图像,第二项参数是提取模式,第三项参数是指定轮廓近似方法,返回值是轮廓列表和层次信息。第二项参数具体数值如下:
常量 | 含义 |
---|---|
cv2.RETR_LIST | 简单检测轮廓 |
cv2.RETR_EXTERNAL | 检测最外层 |
cv2.RETR_CCOMP | 根据层次检测出第二级轮廓 |
cv2.RETR_TREE | 检测所有轮廓,并保留层次 |
第三项参数的选择:
常量 | 含义 |
---|---|
cv2.CHAIN_APPROX_NONE | 保留轮廓上所有点 |
cv2.CHAIN_APPROX_SIMPLE | 去除冗余点后再返回 |