Quantcast
Channel: Show transparent image with openCV python - Stack Overflow
Viewing all articles
Browse latest Browse all 2

Show transparent image with openCV python

$
0
0

im working with opencv and when showing the image it has a black background even its already transparent, (sometimes white) but that depends on the image, in this case the eye image when showing it appears with black background, dont know how can i show it complety transparent:

while True:    recording, frame = video.read();    rgba = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA);    eye.drawEyes(rgba, frame_width, frame_height);    cv2.imshow("Mediapipe", rgba);    if cv2.waitKey(1) & 0xFF == ord('q'):         breakvideo.release();cv2.destroyAllWindows();

and here the class Eye where i call the method to draw the eyes:

class Eye:    MP_FACE = mp.solutions.face_mesh;    FACE = MP_FACE.FaceMesh();    LEFT_EYE = [226, 173]; #468 CENTER LANDMARK    RIGHT_EYE = [398, 446];    EYE_IMAGE = cv2.imread("./assets/eye.png", cv2.IMREAD_UNCHANGED);    RESIZE_EYE = cv2.resize(EYE_IMAGE, (80, 80), interpolation = cv2.INTER_AREA)  # `int(height)` for 2nd value of size    def __init__(self):        self: self        self.eye_left_x = 0;        self.eye_left_y = 0;        self.eye_left_x2 = 0;        self.eye_left_y2 = 0;        self.eye_right_x = 0;        self.eye_right_y = 0        self.eye_right_x2 = 0;        self.eye_right_y2 = 0;        self.centerX = 0;        self.centerY = 0;        self.image = "";    def drawEyes(self, frame, frame_width, frame_height):        face_points = self.FACE.process(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB));        rectangle_height = 30;        if (face_points):            for landmark in face_points.multi_face_landmarks:                for index, points in enumerate(landmark.landmark):                    if (index == self.LEFT_EYE[0]):                        x, y = int(points.x * frame_width), int(points.y * frame_height);                        self.eye_left_x = x;                        self.eye_left_y = y;                    if (index == self.LEFT_EYE[1]):                        x, y = int(points.x * frame_width), int(points.y * frame_height);                        self.eye_left_x2 = x;                        self.eye_left_y2 = y;                    if (index == self.RIGHT_EYE[0]):                        x, y = int(points.x * frame_width), int(points.y * frame_height);                        self.eye_right_x = x;                        self.eye_right_y = y;                    if (index == self.RIGHT_EYE[1]):                        x, y = int(points.x * frame_width), int(points.y * frame_height);                        self.eye_right_x2 = x;                        self.eye_right_y2 = y;                    cv2.rectangle(                        frame,                         (self.eye_left_x, self.eye_left_y - rectangle_height),                         (self.eye_left_x2, self.eye_left_y2 + rectangle_height),                        (0,255,255),                         1                    );                    cv2.rectangle(                        frame,                         (self.eye_right_x, self.eye_right_y - rectangle_height),                         (self.eye_right_x2, self.eye_right_y2 + rectangle_height),                        (0,255,255),                         1                    );                    rectangle_width_left = self.eye_left_x2 - self.eye_left_x;                    rectangle_width_right = self.eye_right_x2 - self.eye_right_x;                    eye_width = hypot(self.eye_left_x - self.eye_left_x2, self.eye_left_y - self.eye_left_y2);                    eye_height = eye_width * 1; #1 = aspect ratio, height image / width image        image = cv2.resize(self.EYE_IMAGE, (int(eye_width), int(eye_height)), interpolation = cv2.INTER_AREA);        h, w = image.shape[:2];        # left eye        x, y = self.eye_left_x, self.eye_left_y;        centerX = (rectangle_width_left - int(w)) // 2;        frame[y-rectangle_height : y + int(w) - rectangle_height, x+centerX : x + centerX+int(w), :] = image        # right eye        x2, y2 = self.eye_right_x, self.eye_right_y;        centerX = (rectangle_width_right - int(w)) // 2;        frame[y2-rectangle_height : y2 + int(w) - rectangle_height, x2+centerX : x2 + centerX+int(w)] = image

this is my code now, i print the frame and it has 4 channel, same with the image, but still dont know how to show it complety transparent, dont understand and dont know how to work with the mask that looks is the case to use here.

some help will be appreciate

enter image description here


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images