You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.3 KiB
37 lines
1.3 KiB
import cv2
|
|
import numpy as np
|
|
|
|
|
|
def face_detect_function(img):
|
|
if len(img.shape) == 3:
|
|
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
|
|
face_detect = cv2.CascadeClassifier(
|
|
'haarcascade_frontalface_default.xml') # 人脸识别分类器
|
|
face = face_detect.detectMultiScale(img)
|
|
for x, y, w, h in face:
|
|
cv2.rectangle(img, (x, y, w, h), color=(0, 0, 255), thickness=2)
|
|
return img
|
|
|
|
|
|
def removeBG(img, back):
|
|
imgt = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
|
back = cv2.resize(back, (imgt.shape[1], imgt.shape[0]))
|
|
if len(back.shape) == 3:
|
|
back = cv2.cvtColor(back, cv2.COLOR_RGB2GRAY)
|
|
bgModel = cv2.createBackgroundSubtractorMOG2(0, 50)
|
|
img = cv2.bilateralFilter(img, 5, 50, 100) # smoothing filter
|
|
fgmask = bgModel.apply(img, learningRate=0.01)
|
|
kernel = np.ones((3, 3), np.uint8)
|
|
fgmask = cv2.erode(fgmask, kernel, iterations=1)
|
|
img = cv2.bitwise_and(img, img, mask=fgmask)
|
|
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
|
img = cv2.GaussianBlur(gray, (41, 41), 0)
|
|
_, img = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU)
|
|
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (17, 17), (-1, -1))
|
|
img = cv2.dilate(img, kernel, iterations=5)
|
|
result = imgt & img
|
|
img = ~img
|
|
result = (back & img) + result
|
|
result = cv2.GaussianBlur(result, (5, 5), 0)
|
|
return result
|