如何使用OpenCV和Python在视频流中逐帧处理视频图像
我是OpenCV的初学者。我想对要上传到服务器的视频帧进行一些图像处理。我只想读取可用的框架并将它们写入目录中。然后,等待视频的另一部分上载并将帧写入目录。并且,我应该等待每个帧都完全上传,然后将其写入文件。
您能告诉我如何使用OpenCV(Python)吗?
编辑1:
我编写了这段代码,用于从文件中捕获视频,而新数据将附加在文件末尾。换句话说,该out.mp4
文件不是完整的视频,并且另一个程序正在其上写入新的帧。我要做的是,等待其他程序编写新框架,然后读取并显示它们。
这是我的代码:
import cv2
cap = cv2.VideoCapture("./out.mp4")
while True:
if cap.grab():
flag, frame = cap.retrieve()
if not flag:
continue
else:
cv2.imshow('video', frame)
if cv2.waitKey(10) == 27:
break
所以问题出在cap.grab()
电话上!如果没有框架,它将返回False
!即使我等了很长时间,它也不会再捕获帧。
-
阅读完的文档后
VideoCapture
。我发现您可以告诉VideoCapture
,下次调用VideoCapture.read()
(或VideoCapture.grab()
)要处理哪个帧。问题是,当您要准备
read()
一个尚未准备就绪的框架时,该VideoCapture
对象会卡在该框架上而永远无法进行。因此,您必须强制其从上一帧重新开始。这是代码
import cv2 cap = cv2.VideoCapture("./out.mp4") while not cap.isOpened(): cap = cv2.VideoCapture("./out.mp4") cv2.waitKey(1000) print "Wait for the header" pos_frame = cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES) while True: flag, frame = cap.read() if flag: # The frame is ready and already captured cv2.imshow('video', frame) pos_frame = cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES) print str(pos_frame)+" frames" else: # The next frame is not ready, so we try to read it again cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, pos_frame-1) print "frame is not ready" # It is better to wait for a while for the next frame to be ready cv2.waitKey(1000) if cv2.waitKey(10) == 27: break if cap.get(cv2.cv.CV_CAP_PROP_POS_FRAMES) == cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT): # If the number of captured frames is equal to the total number of frames, # we stop break