[学习OpenCV攻略][005][视频播放控制]

cvSetCaptureProperty(视频,属性,属性值)

设置视频的属性,属性可以是宏CV_CAP_PROP_POS_FRAMES 视频帧的位置

cvGetCaptureProperty(视频,属性)

得到视频的属性值,属性可以是宏CV_CAP_PROP_FRAMES_COUNT视频帧数,CV_CAP_PROP_FRAME_WIDTH视频的宽度,CV_CAP_PROP_FRAME_HEIGHT

cvCreateTrackbar(滚动条名称,窗口名称,滑动条位置,总帧数,回调函数)

在窗口中创建滚动条,并设置位置和总帧数,当滚动条被拖动时,触发回调函数

cvSetTrackbarPos(滚动条名称,窗口名称,位置)

设置窗口中滚动条的位置

#include <stdio.h>
#include <iostream>
#include <fstream>
#include "cv.h"
#include "highgui.h"

using namespace std;

int g_slider_position = 0;
CvCapture* g_capture = NULL;

void onTrackbarSlide(int pos){
	cvSetCaptureProperty(
		g_capture,
		CV_CAP_PROP_POS_FRAMES,
		pos
	);
}

int getAVIFrames(char * fname) {
    char tempSize[4];
    // Trying to open the video file
    ifstream  videoFile( fname , ios::in | ios::binary );
    // Checking the availablity of the file
    if ( !videoFile ) {
      cout << "Couldn’t open the input file " << fname << endl;
      exit( 1 );
    }
    // get the number of frames
    videoFile.seekg( 0x30 , ios::beg );
    videoFile.read( tempSize , 4 );
    int frames = (unsigned char ) tempSize[0] + 0x100*(unsigned char ) tempSize[1] + 0x10000*(unsigned char ) tempSize[2] +    0x1000000*(unsigned char ) tempSize[3];
    videoFile.close(  );
    return frames;
}

int main(int argc, char** argv){
	cvNamedWindow("hello", CV_WINDOW_AUTOSIZE);
	g_capture = cvCreateFileCapture(argv[1]);
	IplImage *foo = cvQueryFrame(g_capture);

	int frames = (int)cvGetCaptureProperty(
		g_capture,
		CV_CAP_PROP_FRAME_COUNT
	);

	int tmpw = (int)cvGetCaptureProperty(
		g_capture,
		CV_CAP_PROP_FRAME_WIDTH
	);

	int tmph = (int)cvGetCaptureProperty(
		g_capture,
		CV_CAP_PROP_FRAME_HEIGHT
	);

	printf("opencv frames %d w %d h %d\n", frames, tmpw, tmph);

	frames = getAVIFrames(argv[1]);

	printf("hacked frames %d w %d h %d\n", frames, tmpw, tmph);

	cvCreateTrackbar(
		"position",
		"hello",
		&g_slider_position,
		frames,
		onTrackbarSlide
	);

	IplImage *frame;
	frames = 0;
	while(1){
		frame = cvQueryFrame(g_capture);
		if(!frame){
			break;
		}

		frames++;
		printf("\nFrame number=%d", frames);
		cvSetTrackbarPos("position", "hello", frames);

		cvShowImage("hello", frame);

		char c = (char)cvWaitKey(10);
		if(c == 27){
			break;
		}
	}

	cvReleaseCapture(&g_capture);
	cvDestroyWindow("hello");

	return 0;
}
时间: 2024-12-24 12:00:30

[学习OpenCV攻略][005][视频播放控制]的相关文章

[学习OpenCV攻略][001][Ubuntu安装及配置]

学习环境: 1.操作系统 Ubuntn 2.学习书籍 <学习OpenCV> 3.OpenCV版本 opencv-1.0.0 root登入配置 Ubuntn默认不允许root用户登入,在登录窗口只能看到普通用户和访客用户.我们做开发需要经常用到root权限,所以把root用户设置成自动登录用户. 1.以普通用户登录后,在终端中输入: sudo passwd root,给root用户添加密码. 2.su root,切换到root用户. 3.vim /etc/lightdm/lightdm.conf

[学习OpenCV攻略][011][显示图片]

学习资料: http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html   包含头文件 core.hpp:包含了基本的定义和库 highgui.hpp:包含了基本的输入输出操作 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> 创建一个矩阵对象来存储和载入图像数据 Mat image; imread函

[学习OpenCV攻略][016][RedHat下安装OpenCV]

安装环境 操作系统: Red Hat Enterprise Linux Server 6.3 相关软件: OpenCV-2.3.1a.tar.bz2.cmake-3.5.1.tar.gz 下载地址: OpenCV: http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.3.1/OpenCV-2.3.1a.tar.bz2 CMake: https://cmake.org/files/v3.5/cmake-3.5.1

[学习OpenCV攻略][007][缩小图片]

cvPryDown(输入图片,输出图片) 根据输出图片的大小,把输入图片进行压缩 cvPryUp(输入图片,输出图片) 根据输出图片的大小,把输入图片进行放大 #include "cv.h" #include "highgui.h" IplImage *doPyrUp(IplImage *in){ //assert(in->width%2 == 0 && in->height%2 == 0); //IplImage *out = cvCr

[学习OpenCV攻略][006][平滑图片]

cvCreateImage(图片大小,像素位数,通道数) 创建图片,根据输入的图片大小,各个通道像素点的位数,和通道数.像素点宏IPL_DEPTH_8U cvGetSize(图片) 得到图片的大小信息 cvSmooth(输入图片,输出图片,平滑方式,平滑宽,平滑高) 输出经过平滑处理后的图片,平滑方式宏CV_GAUSSIAN #include "cv.h" #include "highgui.h" void smooth_example(IplImage *imag

[学习OpenCV攻略][004][播放AVI视频]

cvCreateFileCapture(文件路径) 创建一个影音文件录像机,返回值为CvCapture类型,用于读取视频文件 cvQuerFrame(视频) 将下一帧视频文件载入内存,当CvCapture被释放时,每一帧对应的内存会被释放,所以不需要cvReleaseImage(&frame); cvReleaseCapture(视频) 释放CvCapture结果的内存空间,同时也会关闭所有打开的视频文件相关的句柄. #include "highgui.h" int main(

[学习OpenCV攻略][012][读取、修改、保存图像]

使用 imread 读取图像,图像路径为 imageName ,图像按BGR格式读取. image = imread( imageName, CV_LOAD_IMAGE_COLOR); 将RGB图像转化为灰度格式. cvtColor( image, gray_image, CV_BGR2GRAY ); 使用函数 imwrite 将得到的灰度图像 gray_image 保存到硬盘.程序结束时,该灰度图像将会被释放. imwrite( "../../images/Gray_Image.jpg&quo

[学习OpenCV攻略][009][从摄像机读入数据]

cvCreateCameraCapture(设备ID) 创建一个摄像机视频,返回值是CvCapture*类型.设备ID表示设备的编号,如果有多个摄像机设备,-1表示随机选择一个设备. #include "cv.h" #include "highgui.h" int main(int argc, char **argv){ cvNamedWindow("hello", CV_WINDOW_AUTOSIZE); CvCapture *capture;

opencv视频学习第五课(视频播放控制)笔记整理

这次是学习怎么创建一个控制台的滚动条,并且使用它控制视频的播放.为了测试一些东西,改编了视频教程中的代码. #include "stdafx.h" #include "highgui.h" #include "cv.h" CvCapture* g_capture = NULL; //记录滚动条的当前位置 int g_slider_pos = 0; //对视频帧进行计数的变量 int frame_count = 0; void onTrackbar