簡體   English   中英

如何使用 cv2 將圖像疊加層添加到我的實時視頻中?

[英]How do I add an image overlay to my live video using cv2?

這是我的代碼,我看過一些教程但找不到我要找的東西我想在我的網絡攝像頭上覆蓋 Frame.png 圖像。 我試圖直接添加圖像,但它也沒有用。 如果可能,有沒有辦法添加圖像,而不是疊加,而是將圖像保持在實時網絡攝像頭中的某個坐標 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()

您可以在 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM