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