Home > other >  How do I add an image overlay to my live video using cv2?
How do I add an image overlay to my live video using cv2?

Time:01-29

This is my code, I've looked at some tutorials but can't find what I'm looking for I want to overlay the Frame.png image on my webcam. I tried to add the image directly but it didn't work either. If possible, Is there a way to add an image, not to overlay but to keep the image at a certain coordinate in the live webcam window

    import cv2
    import numpy as np
    
    def detect_and_save():
        alpha = 0.2
        beta = 1-alpha
        cap = cv2.VideoCapture(0)
        sciframe = cv2.imread('Frame.png')
    
        classifier = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
    
        while True:
            ret ,frame = cap.read()
            overlay = frame.copy()
            output = frame.copy()
    
            gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    
            faces = classifier.detectMultiScale(gray,1.5,5)
            cv2.putText(output, "HUD Test",(175, 50), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 50, 50), 3)
            cv2
    
            for face in faces:
                x,y,w,h = face
    
                cv2.rectangle(overlay,(x,y),(x w,y h),(255,200,0),-1)
                cv2.rectangle(overlay,(x,y),(x w,y h),(255,0,0),1)
                cv2.rectangle(overlay,(x,y-20),(x w,y),(25,20,0),-1)
    
                cv2.addWeighted(overlay,alpha,output,beta,0,output)
    
                cv2.putText(output,"Human",(x 10,y-10),cv2.FONT_HERSHEY_SIMPLEX,
                            0.35, (0, 0, 255), 1)
            if not ret:
                continue
            cv2.imshow("HUD",output)
            key = cv2.waitKey(1)
    
            if key == ord('q'):
                break
            elif key == ord('s'):
                cv2.imwrite('./images/CID_{}.png'.format(time.strftime('%d%m%y_%H_%M_%S')),output)
        cap.release()
        cv2.destroyAllWindows()
    
    
    
    
    if __name__ == "__main__":
        import time
        detect_and_save()

CodePudding user response:

You can directly add one image on top of another one at any coordinate easily in opencv.

cap = cv2.VideoCapture(0)
im_height = 50  #define your top image size here
im_width = 50
im = cv2.resize(cv2.imread("Frame.png"), (im_width, im_height))

while (True):
    ret, frame = cap.read()
    frame[0:im_width, 0:im_height] = im  #for top-left corner, 0:50 and 0:50 for my image; select your region here like 200:250
    
    cv2.imshow("live camera", frame)
    
    if cv2.waitKey(1) == ord("q"):
        break
cap.release()
cv2.destroyAllWindows()
  • Related