基于OpenCV实现视频循环播放
作者:求则得之,舍则失之 时间:2023-07-13 09:10:33
介绍
本文将介绍基于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
标签:Python,C++,OpenCV,视频,播放
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
MySQL索引底层数据结构详情
2024-01-23 09:47:53
![](https://img.aspxhome.com/file/2023/0/112310_0s.png)
浅谈python3中input输入的使用
2022-05-15 22:32:57
![](https://img.aspxhome.com/file/2023/6/81856_0s.png)
Mysql数据库group by原理详解
2024-01-19 20:20:44
![](https://img.aspxhome.com/file/2023/0/69270_0s.png)
element中form组件prop嵌套属性的问题解决
2023-07-02 16:49:18
![](https://img.aspxhome.com/file/2023/1/139791_0s.jpg)
python爬虫之基金信息存储
2021-12-25 03:20:04
![](https://img.aspxhome.com/file/2023/8/134518_0s.webp)
JS中call/apply、arguments、undefined/null方法详解
2024-04-19 11:01:31
![](https://img.aspxhome.com/file/2023/7/136247_0s.png)
JavaScript setTimeout和setInterval的使用方法 说明
2023-08-31 10:48:19
SQL Server使用T-SQL进阶之公用表表达式(CTE)
2024-01-17 22:42:32
![](https://img.aspxhome.com/file/2023/8/89698_0s.jpg)
使用 PHP Masked Package 屏蔽敏感数据的实现方法
2023-09-03 23:49:13
Python序列对象与String类型内置方法详解
2023-09-22 13:25:18
完全讲解 使用MSCS建立SQL Server集群
2009-01-19 14:10:00
Varchar与char的区别
2008-02-28 12:44:00
Python编写淘宝秒杀脚本
2021-01-31 23:23:42
![](https://img.aspxhome.com/file/2023/8/79418_0s.jpg)
分享4个方便且好用的Python自动化脚本
2023-05-31 02:20:32
php mysql获取表字段名称和字段信息的三种方法
2023-11-18 22:47:26
![](https://img.aspxhome.com/file/2023/9/104179_0s.png)
PyTorch之torch.randn()如何创建正态分布随机数
2022-10-20 01:22:18
nodejs微信公众号支付开发
2024-05-11 09:17:11
兼容主流浏览器的JS复制内容到剪贴板
2024-04-30 08:52:57
Golang实现文件夹的创建与删除的方法详解
2024-02-02 13:57:02
vue eslint报错error "Component name "*****" should always be multi-word"解决
2024-05-13 09:10:32
![](https://img.aspxhome.com/file/2023/9/126579_0s.png)