import cv2 import numpy as np def roi(frame): gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (3, 3), 0) height, width = blurred.shape face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') faces = face_cascade.detectMultiScale(blurred, scaleFactor=1.3, minNeighbors=5, minSize=(30, 30)) for (x, y, w, h) in faces: c_x = int(x + w / 2) c_y = int(y + h / 2) c_x2 = int((int(c_x - w / 2 * 0.8) + int(c_x + w / 2 * 0.8)) / 2) c_y2 = int((int(c_y - h / 2 * 1.4) + int(c_y + h / 2 * 1.1)) / 2) center_ellipse = (c_x2, c_y2) axes = (int(w / 2 * 1), int(h / 2 * 1.4)) # Major axis, Minor axis angle = 0 # Rotation angle color = (255, 255, 255) # Color in BGR format (white) # thickness = 2 mask = np.zeros((height, width), dtype=np.uint8) cv2.ellipse(mask, center_ellipse, axes, angle, 0, 360, 0, -1) # 255 for a white oval # Apply the inverted mask to the face result = cv2.bitwise_and(frame, frame, mask=mask) black_mask = (result[:, :, 3] == 0)# & (result[:, :, 1] == 0) & (result[:, :, 2] == 0) #print(result[c_x2, c_y2,1]) # Replace black pixels with white pixels result[black_mask] = [result[0, 0, 0], result[0, 0, 1], result[0, 0, 2]] return frame