Python OpenCV:视频结束后如何重新启动?
我正在播放一个视频文件,但播放结束后如何再次播放Python OpenCV:视频结束后如何重新启动?,python,c++,c,opencv,Python,C++,C,Opencv,我正在播放一个视频文件,但播放结束后如何再次播放 Javier关闭当前捕获并再次打开: // play video in a loop while (1) { CvCapture *capture = cvCaptureFromAVI("video.avi"); if(!capture) { printf("!!! cvCaptureFromAVI failed (file not found?)\n"); return -1;
Javier关闭当前捕获并再次打开:
// play video in a loop
while (1)
{
CvCapture *capture = cvCaptureFromAVI("video.avi");
if(!capture)
{
printf("!!! cvCaptureFromAVI failed (file not found?)\n");
return -1;
}
IplImage* frame = NULL;
char key = 0;
while (key != 'q')
{
frame = cvQueryFrame(capture);
if (!frame)
{
printf("!!! cvQueryFrame failed: no frame\n");
break;
}
cvShowImage("window", frame);
key = cvWaitKey(10);
}
cvReleaseImage(&frame);
cvReleaseCapture(&capture);
}
此代码不完整,尚未测试。它仅用于说明目的。您不需要重新打开当前捕获。您需要做的就是将位置重置为文件的开头,并继续循环,而不是中断循环
if (!frame)
{
printf("!!! cvQueryFrame failed: no frame\n");
cvSetCaptureProperty(capture, CV_CAP_PROP_POS_AVI_RATIO , 0);
continue;
}
然而,有一个重大的延迟,好像你是重新打开它
请参见如果要反复重新启动视频(也称为循环播放),可以在帧数达到
cap.get时使用If语句(cv2.cv.cv\u cap\u PROP\u frame\u count)
然后将帧数和cap.set(cv2.cv.cv\u cap\u PROP\u POS\u FRAMES,num)
重置为相同的值。我将OpenCV 2.4.9与Python2.7.9一起使用,下面的示例为我不断循环视频
导入cv2
cap=cv2.VideoCapture('path/to/video')
帧计数器=0
虽然(正确):
#逐帧捕获
ret,frame=cap.read()
帧计数器+=1
#如果到达最后一帧,请重置捕获和帧计数器
如果frame\u counter==cap.get(cv2.cv.cv\u cap\u PROP\u frame\u COUNT):
frame_counter=0#或其他,只要它与下一行相同
封盖套件(cv2.cv.cv\u封盖\u道具\u位置\u框架,0)
#我们在框架上的行动就在这里
灰色=cv2.CVT颜色(边框,cv2.COLOR\u BGR2GRAY)
#显示结果帧
cv2.imshow(“帧”,灰色)
如果cv2.waitKey(1)&0xFF==ord('q'):
打破
#完成所有操作后,释放捕获
第1章释放()
cv2.destroyAllWindows()
它还可以重新捕获视频,而不是重置帧数:
如果frame\u counter==cap.get(cv2.cv.cv\u cap\u PROP\u frame\u COUNT):
帧计数器=0
cap=cv2.视频捕获(视频名称)
C?C++?JAVA还是怎样请改进标签。如果这个问题已经成功回答,请考虑点击它旁边的复选框来选择正式答案。如果没有,请考虑添加自己的答案。奇怪的是,在第一次重置之后,FEP会返回最后一帧。如果有人使用OpenCV 4.2.0版本,只需将cv2.cv.cv\u CAP\u PROP\u FRAME\u COUNT
替换为cv2.CAP\u PROP\u FRAME\u COUNT
和cv2.cv.cv.cv\u CAP\u PROP\u POS\u FRAMES
替换为cv2.CAP\u PROP\u POS\u FRAMES
。这对我很有用。如果您使用的是opencv python 4.2,CAP\u PROP\u FRAME\u COUNT
没有前缀CV