使用IP摄像机从实时流中删除捕获的重复图像

时间:2019-01-21 10:30:56

标签: python opencv

我正在完美地从摄像机的实时流中捕获图像,但是在一个人的几秒钟内捕获的图像数量。所以我只需要一个人的完美形象...怎么会得到

cap = cv2.VideoCapture("rtsp://admin:admin@192.168.0.7:554/cam/realmonitor?channel=1&subtype=0")
face_cascade = cv2.CascadeClassifier('E://final_facematch//facematch-master//haarcascade_frontalface_default.xml')
cap.set(3,640) # set Width
cap.set(4,480) # set Height
def getfilename():
    x = datetime.datetime.now()
    filename=x.strftime("%d")+x.strftime("%m")+x.strftime("%Y")+x.strftime("%H")+x.strftime("%M")+x.strftime("%S")+""+str(random.randint(1,300))+".jpg"
    return filename
while True:
    ret, gray = cap.read()
    faces = face_cascade.detectMultiScale(
         gray,
         scaleFactor=1.3,
         minNeighbors=15,      
         minSize=(65, 65))
    for (x,y,w,h) in faces:
        cv2.rectangle(gray,(x,y),(x+w,y+h),(255,0,0),2)
        roi_color = gray[y:y+h, x:x+w]
        face_cascade = 
        cv2.imwrite("E:/python_pro/dataset/"+getfilename(),roi_color)
cv2.imshow('video', gray)    
k = cv2.waitKey(1) & 0xff

1 个答案:

答案 0 :(得分:1)

我不知道一张完美的图像,但是您可以限制为一张图像。捕获后等待几秒钟,以使帧的屏幕截图不会淹没您的系统。

您可以放置​​一个开始时间(在捕获帧或使用imwrite后初始化)和一个结束时间(在循环中保持更改)并检查

if end_time - start_time > 30

即等待30秒,然后再恢复检测,无论您要达到什么目的。

如果您可以将代码放在这里,我也许可以提供更好的帮助。

看到代码后,请编辑以上答案:

start_time = 10
while True:
    end_time = time.time()
    ret, gray = cap.read()
    if end_time - start_time > 30:
        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=15, minSize=(65, 65))
        for (x, y, w, h) in faces:
            cv2.rectangle(gray, (x, y), (x + w, y + h), (255, 0, 0), 2)
            roi_color = gray[y:y + h, x:x + w]
            face_cascade = cv2.imwrite("E:/python_pro/dataset/" + getfilename(), roi_color)
            start_time = time.time()

    cv2.imshow('video', gray)
    k = cv2.waitKey(1) & 0xff

程序检测到面部时,单击该图片后,此代码将等待30秒。