基于OpenCV实现视频循环播放
作者:求则得之,舍则失之 发布时间:2023-07-13 09:10:33
标签:Python,C++,OpenCV,视频,播放
介绍
本文将介绍基于OpenCV实现视频的循环播放。
有以下三个步骤:
首先设置一个frame的设置参数frame_counter,值为0
在读帧时间,将每次加一
当 frame_counter 达到视频总帧数时,将当前的帧设置为 0
视频总帧数:CAP_PROP_FRAME_COUNT
设置当前的帧:CAP_PROP_POS_FRAMES
VideoCaptureProperties通用属性标识符参考地址。
1.Python+OpenCV实现
import cv2
cap = cv2.VideoCapture("001.mp4")
frame_counter = 0
while (cap.isOpened()):
ret, frame = cap.read()
frame_counter += 1
if frame_counter == int(cap.get(cv2.CAP_PROP_FRAME_COUNT)):
frame_counter = 0
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
cv2.imshow("frame", frame)
key = cv2.waitKey(1)
# ESC
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
2.C++ + OpenCV实现
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
int main() {
cv::Mat frame;
cv::VideoCapture cap("001.mp4");
int frame_counter = 0;
while (true)
{
cap >> frame;
if (!frame.data)
{
printf("Image not loaded");
return -1;
}
frame_counter += 1;
if (frame_counter == int(cap.get(cv::CAP_PROP_FRAME_COUNT))){
frame_counter = 0;
cap.set(cv::CAP_PROP_POS_FRAMES, 0);
}
cv::imshow("demo", frame);
char(key)=(char)cv::waitKey(1);
if(key==27)
break;
}
return 0;
}
补充
当然,OpenCV不仅能实现视频的循环播放,还能实现视频的倒放
下面将用C语言实现视频的倒放,以下是示例代码
#include <stdio.h>
#include<math.h>
#include <cv.h>
#include <highgui.h>
int main(int argc, char* argv[]) {undefined
int i = 0, j = 0, k = 0;
cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);
CvCapture* capture = 0;
capture = cvCreateFileCapture("gr18.avi");
if (!capture) {undefined
return -1;
}
IplImage *out = cvQueryFrame(capture);//Init the video read
//用于确定帧数
while ((out = cvQueryFrame(capture)) != NULL) {undefined
k++;
}
cvReleaseCapture(&capture);
capture = cvCreateFileCapture("gr18.avi");
out = cvQueryFrame(capture);//没有它J会多一帧。
double fps = cvGetCaptureProperty(
capture,
CV_CAP_PROP_FPS
);
CvSize size = cvSize(
(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT)
);
CvVideoWriter *writer = cvCreateVideoWriter(
"gr13.avi",
CV_FOURCC('M', 'J', 'P', 'G'),
fps,
size
, 1
);
IplImage* logpolar_frame = cvCreateImage(
size,
IPL_DEPTH_8U,
3
);
//out = cvCloneImage(img);
int booll = 1;
while ((out = cvQueryFrame(capture)) != NULL)
{undefined
i = 0;
j++;;
booll = 0;
if (j == k)//用于从第J帧开始写入
{undefined
cvShowImage("Example3", out);
cvWaitKey(1);
cvWriteFrame(writer, out);
k--; j = 0;
//重复初始化
capture = cvCreateFileCapture("gr18.avi");
out = cvQueryFrame(capture);
}
//j++;
if (k == 0)break;
}
printf("||%d %d", k, j); getchar();
cvReleaseVideoWriter(&writer);
cvReleaseImage(&logpolar_frame);
cvReleaseCapture(&capture);
//cvReleaseCapture(&capture);
cvDestroyWindow("Example3");
return(0);
}
来源:https://blog.csdn.net/weixin_43229348/article/details/123092505
0
投稿
猜你喜欢
- 对于大前端来说,JS可谓是我们的神器,从页面的效果到数据的传递,再到后台的业务,无处不充斥着JS的身影,但是万能的JS也有贪玩的时候,某一时
- 以下的文章主要是介绍SQL Server数据库与其实际应用元数据,我前两天在相关网站看见SQL Server数据库与其实际应用元数据的资料,
- Asp中Server.ScriptTimeOut属性需要注意的一点Server.ScriptTimeout?这个属性给定Asp脚本执行的最大
- ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0)mysql> select ASCII(
- 前言最近实习任务为黑烟检测,想起了可以尝试用yolov5来跑下,之前一直都是用的RCNN系列,这次就试试yolo系列。一、安装pytorch
- 目录前言什么是pip再说 pip, 它就像应用宝下面给我们的手机安装应用宝Centos 安装pip for python2试用pip来安装库
- 1.将下面一段代码插入<head>与</head>之间:<script> function&
- 判断一个数是否能被另一个整数整除是一个挺简单的问题,一般一个模运算就可以搞定了,懒惰的晓萌还是不想自己做,于是找到你帮他写代码,你就帮帮他吧
- 我一直都不喜欢在访问数据库时采用拼接SQL的方法,原因有以下几点: 1. 不安全:有被SQL注入的风险。 2. 可能会影响性能:每条SQL语
- 1. Document.form.item 问题 现有问题:  
- Python使用pandas导入xlsx格式的excel文件内容1. 基本导入在 Python中使用pandas导入.xlsx文件的方法是r
- 今天暴风彬彬要讨论的网站可用 * ,是让你的网站文字链接提高一定的可用性,而且实现起来非常简单,其实这也算是提高用户体验的方法。扩大可点击区
- 首先为大家分享python实现发送手机短信验证码后台方法,供大家参考,具体内容如下1、生成4位数字验证码def createPhoneCod
- 为什么我把自己机子上的数据库备份文件往另一台机子上还原不成功?可能是你在Restore的对话框中选项不正确。Restore 有三个选项,分别
- CSS的出现使网页制作者在对网页元素的控制方便许多,当然,有利必有弊,CSS只能对颜色、大小、距离等静
- 本文实例为大家分享了python+rsync精确同步指定格式文件的具体代码,供大家参考,具体内容如下# coding: utf-8#!/us
- 自动化处理PDF文件使用Python完成简单的PDF文件处理操作,如PDF文件的批量合并、拆分、加密以及添加水印等。1. 批量合并PDF文件
- 一些大型站点都有着非常一流的视觉外观,它们很可能在设计时使用了网格系统。网格可以是页面布局显得紧凑而且稳定,为设计师在设计站点时提供一个逻辑
- 之前用Crystal做了一个数字转English Word的Formula刚刚心血来潮, 大半个晚上写了JS版本的数字转换, 由于JS的Bu
- 最小生成树的Prim算法也是贪心算法的一大经典应用。Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树。Prim算法过程