基于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


猜你喜欢
- 正常的使用方法安装npm install webpack-bundle-analyzer -Dwebpack.config.js:vue-c
- 测试用例(1) 测试用例(2)代码如下(python):# coding=utf-8from appium import webd
- 今天写一个在windows下批量修改文件名的python脚本,用到文件的遍历。用python进行文件遍历有多种方法,这里列举并说明一下。os
- ▲ SHOW执行下面这个命令可以了解服务器的运行状态mysql >show status;该命令将显示出一长列状态
- 安装pyqt5wind@wind-ThinkPad-X250:~/Downloads/PyQt5_gpl-5.12.2$ python3 -
- 用python画图很多是根据z=f(x,y)来画图的,本博文将三个对应的坐标点输入画图:散点图:import matplotlib.pypl
- 本文实例讲述了JS中getElementsByClassName与classList兼容性问题解决方案。分享给大家供大家参考,具体如下:do
- magpierss中就用到了snoopy,这让我有点兴趣去研究下这个咚咚。再SF上,找到了这个源代码。居然就是一个类,但不要笑看哦,功能可是
- logging日志模块:是用来记录日志的模块,一般记录用户在软件中的操作使用方法:模板直接拿来用,手动修改# logging的配置信息(模板
- MySQL分区方便了我们的使用,但是MySQL分区究竟能做些什么,MySQL分区有没有什么限制呢?阅读下文,您就能找到答案。MySQL分区能
- 一、前言分布式环境下数据库的读写分离策略是解决数据库读写性能瓶颈的一个关键解决方案,更是最大限度了提高了应用中读取 (Read)
- HttpRouter是一个轻量级但却非常高效的multiplexer。手册:https://godoc.org/github.com/jul
- 前些年,HandlerSocket的横空出世让人们眼前一亮,当时我还写了一篇文章介绍了其用法梗概,时至今日,由于种种原因,HandlerSo
- 一.创建正则表达式1.re模块 所有python的正则表达式都在re模块中,使用时导入import rere模块的compile(
- 废话不多说了,直接上代码吧!#!/usr/bin/env python# coding=utf-8# 画一棵樱花import turtlei
- 现在公布方法:替换editor.js 函数 // Toolbar button onmouseup
- 1,创建测试表CREATE TABLE `testsign` ( `userid` int(5) DEFAULT NULL, `user
- 1、引言小鱼:小 * 丝,走啊,出去撸串啊,小 * 丝:没时间啊,鱼哥小鱼:嗯??? 啥事情让你忙的撸串都不去了小 * 丝:我的BOSS让我写一个自动化
- 开始刷leetcode算法题 今天做的是“买卖股票的最佳时机”题目要求 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计
- python3标准库里自带线程池ThreadPoolExecutor和进程池ProcessPoolExecutor。如果你用的是python