使用Opencv添加一个进度条来控制视频播放

转载自《学习OpenCV》(中文版)
#include "stdafx.h"

#include<opencv2\opencv.hpp>

using namespace cv;

int	 g_slider_position = 0;		//初始化进度条
CvCapture* g_capture = NULL;	//定义g_capture为全局变量,因为回调函数需要使用CvCapture对象

//定义回调函数,滚动条位置将作为一个32位整数以参数形式传入
void onTrackbarSlide(int pos) {
	cvSetCaptureProperty(
		g_capture,
		CV_CAP_PROP_POS_FRAMES,	//以帧数来设置读入位置(用AVI_RATIO代替FRAMES实现通过视频长度比例来设置读入位置)
		pos
	);
}


int main(int agrc, char** argv)
{
	cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);
	g_capture = cvCreateFileCapture("D:\\学习工作\\大三下\\当代摄影测量\\What is Remote Sensing_标清.flv");
	if (g_capture == NULL) {
		printf("NO capture!\n");
		return 1;
	}
	
	int frames = (int)cvGetCaptureProperty(
		g_capture,
		CV_CAP_PROP_FRAME_COUNT
	);
	if (frames != 0) {
		cvCreateTrackbar("Position","Example3",&g_slider_position,frames,onTrackbarSlide);
	}
	
	IplImage* frame;
	while (1) {
		frame = cvQueryFrame(g_capture);
		if (!frame) break;
		cvShowImage("Example3", frame);
		g_slider_position++;
		cvSetTrackbarPos("Position", "Example3", g_slider_position);
		char c = cvWaitKey(33);
		if (c == 27) break;
	}
	cvReleaseCapture(&g_capture);
	cvDestroyWindow("Example3");

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要为视频添加进度条,可以使用OpenCV中的VideoCapture和VideoWriter类来读取和写入视频文件。在读取视频文件时,可以使用VideoCapture类中的get方法获取视频的总帧数和帧率,然后根据当前的帧数和帧率计算出视频的当前播放时间。然后,可以使用OpenCV中的cv::putText函数将当前播放时间绘制到视频帧上,形成进度条。最后,使用VideoWriter类将带有进度条视频帧写入到新的视频文件中。 下面是一个简单的示例代码,用于在视频帧上添加进度条: ```c++ #include <opencv2/opencv.hpp> #include <string> using namespace cv; using namespace std; int main(int argc, char** argv) { // 打开视频文件 VideoCapture cap("input_video.mp4"); if (!cap.isOpened()) { cerr << "Error opening video file" << endl; return -1; } // 获取视频信息 int totalFrames = cap.get(CAP_PROP_FRAME_COUNT); int fps = cap.get(CAP_PROP_FPS); // 创建输出视频文件 string outputFilename = "output_video.mp4"; VideoWriter writer(outputFilename, VideoWriter::fourcc('M', 'P', '4', 'V'), fps, Size(cap.get(CAP_PROP_FRAME_WIDTH), cap.get(CAP_PROP_FRAME_HEIGHT))); // 定义文本属性 int fontFace = FONT_HERSHEY_SIMPLEX; double fontScale = 1; Scalar fontColor(0, 255, 0); int thickness = 2; // 读取视频帧并添加进度条 Mat frame; int currentFrame = 0; while (cap.read(frame)) { // 计算当前时间 double currentTime = (double)currentFrame / fps; // 绘制进度条 string timeString = to_string(currentTime); putText(frame, timeString, Point(50, 50), fontFace, fontScale, fontColor, thickness); // 写入视频帧 writer.write(frame); // 更新当前帧数 currentFrame++; } // 释放资源 cap.release(); writer.release(); return 0; } ``` 这个示例代码中,我们首先打开输入视频文件,然后获取视频的总帧数和帧率。接着,我们创建一个输出视频文件,并使用while循环读取视频帧。在每一帧中,我们计算当前播放时间并将其绘制为进度条,然后将带有进度条视频帧写入到输出视频文件中。最后,我们释放资源并结束程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值