我有代码:
import cv2
import matplotlib.pyplot as plt
import cvlib as cv
from cvlib.object_detection import draw_bbox
im = cv2.imread(r'C:\Users\james\OneDrive\Desktop\logos\normal.png')
bbox, label, conf = cv.detect_common_objects(im)
output_image = draw_bbox(im, bbox, label, conf)
plt.imshow(output_image)
plt.show()这可以检测到图片中的大多数物体,但我希望能够从实时视频中进行检测,我尝试使用cap = cv2.VideoCapture(0),但我无法使其工作。
发布于 2020-07-08 10:45:16
典型的程序会执行每一行,直到执行完毕,然后退出。您的代码要求它打开一个流并显示一个帧。然后,因为它已经完成了您要求它做的所有事情,所以它退出。
在注释中提供的代码中,您将在.show()之后立即使用matplotlib的.clf(),这将清除该图形,并可能导致您的问题。您应该改用cv2.imshow()。
如果希望它保持打开状态,则需要将显示代码放入getting started part of the docs中所示的while True循环中。把他们的代码和你的代码结合起来,你会得到类似这样的结果(不过我还没有测试过它):
import numpy as np
import cv2
import cvlib as cv
from cvlib.object_detection import draw_bbox
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Detect objects and draw on screen
bbox, label, conf = cv.detect_common_objects(frame)
output_image = draw_bbox(im, bbox, label, conf)
cv2.imshow('output',output_image)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()对于网络摄像头,这将继续进行,直到您按Q键中断程序。
请注意,这可能不会顺利运行,因为对象检测模型通常在计算上相当昂贵。但这是另一个问题的挑战。
https://stackoverflow.com/questions/62766905
复制相似问题