python 如何使用cv2在我的实时视频中添加图像叠加?

m4pnthwp  于 2023-01-29  发布在  Python
关注(0)|答案(1)|浏览(160)

这是我的代码,我已经看了一些教程,但找不到我要找的我想覆盖的Frame.png图像在我的摄像头上。我试图直接添加图像,但它也没有工作。如果可能的话,有没有一种方法来添加图像,不覆盖,但保持图像在某个坐标在实时摄像头窗口

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()
q3aa0525

q3aa05251#

在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()

相关问题