《学习opencv》第四章第四题
来源:互联网 发布:网络装修平台哪家最好 编辑:程序博客网 时间:2024/05/24 22:43
读入并显示视频文件,创建两个滑动条:
1 控制视频播放位置,以10为步长跳进
2 控制视频的停止、播放
代码:
// chapter4_4.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<cv.h>#include<highgui.h>int g_slider_Position = 0;//两个滑动条的初始位置int g_slider_Position1 = 0;CvCapture *g_capture = NULL;int i = 0;bool t = true;void TrackbarSlider(int pos){i = pos;}void switch_callback(int pos){if (!pos)t = true;elset = false;}int _tmain(int argc, _TCHAR* argv[]){cvNamedWindow("video", CV_WINDOW_AUTOSIZE);g_capture = cvCaptureFromFile("D:/768x576.avi");//读取视频, 返回视频结构指针int frames = (int)cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT);//从视频结构读取视频帧数if (frames != 0){//创建两个滑动条cvCreateTrackbar("Position", "video", &g_slider_Position, frames, TrackbarSlider);cvCreateTrackbar("Position1", "video", &g_slider_Position1, 1, switch_callback);}else{printf("read video wrong!");}IplImage* frame;while ((frame = cvQueryFrame(g_capture)) != NULL)//从视频文件中读取一帧,解压返回{char c = cvWaitKey(10); if (c == 27)break;cvShowImage("video", frame);cvSetTrackbarPos("Position", "video", i);if (t){i += 10;cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, i);}else{cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, i);}}cvReleaseCapture(&g_capture);cvDestroyWindow("video");return 0;}
思路:定义两个全局变量i,t记录视频文件的当前帧数,并更新滑动条位置。暂停播放,即始终将视频设置在该帧。
(double) cvGetCaptureProperty( CvCapture* capture, int property_id )获取视频的属性:
capture 视频结构指针
property_id 属性标识
属性有
#define CV_CAP_PROP_POS_MSEC 0 //以毫秒计算的当前的位置#define CV_CAP_PROP_POS_FRAMES 1 //以帧计算当前的位置#define CV_CAP_PROP_POS_AVI_RATIO 2 //视频的相对位置,从0 到 1 前面这三个参数应该是跟视频播放,读取相关的动态信息#define CV_CAP_PROP_FRAME_WIDTH 3 //帧宽#define CV_CAP_PROP_FRAME_HEIGHT 4 //帧高度#define CV_CAP_PROP_FPS 5 //帧率#define CV_CAP_PROP_FOURCC 6 //4 字符编码方式#define CV_CAP_PROP_FRAME_COUNT 7 //视频帧数#define CV_CAP_PROP_FORMAT 8 //视频格式#define CV_CAP_PROP_MODE 9 //#define CV_CAP_PROP_BRIGHTNESS 10 //亮度#define CV_CAP_PROP_CONTRAST 11 //对比度#define CV_CAP_PROP_SATURATION 12 //饱和度#define CV_CAP_PROP_HUE 13 //色调#define CV_CAP_PROP_GAIN 14 //增益#define CV_CAP_PROP_EXPOSURE 15 //曝光#define CV_CAP_PROP_CONVERT_RGB 16 //#define CV_CAP_PROP_WHITE_BALANCE 17 //白平衡#define CV_CAP_PROP_RECTIFICATION 18 //此处我们用的是CV_CAP_PROP_FRAME_COUNT,即获取视频帧数
(int) cvCreateTrackbar( const char* trackbar_name, const char* window_name,int* value, int count, CvTrackbarCallback on_change CV_DEFAULT(NULL));
创建滑动条:
value:记录滑动条位置的值,当滑动条的位置改变时,该值相应发生变化。
count: 滑动条位置的最大值
CvTrackbarCallback:回调函数,每当滑动条位置变化时调用该函数,本例中用于更新i值。默认为NULL。
(void) cvSetTrackbarPos( const char* trackbar_name, const char* window_name, int pos );设置滑动条位置:
trackbar_name:滑动条名字
window_name:窗口名字
pos:位置的值
(int) cvSetCaptureProperty( CvCapture* capture, int property_id, double value )设置视频文件属性:
本例中作用为,将视频文件定位到指定帧数。
由此可见,滑动条并不会自动根据帧数的增长而增长,而是通过程序同步的,因此需要配合cvSetTrackbarPos()一起使用达到同步效果
capture:视频结构指针
property_id:属性id:
CV_CAP_PROP_POS_MSEC - 从文件开始的位置,单位为毫秒
CV_CAP_PROP_POS_FRAMES - 单位为帧数的位置(只对视频文件有效)
CV_CAP_PROP_POS_AVI_RATIO - 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
CV_CAP_PROP_FRAME_WIDTH - 视频流的帧宽度(只对摄像头有效)
CV_CAP_PROP_FRAME_HEIGHT - 视频流的帧高度(只对摄像头有效)
CV_CAP_PROP_FPS - 帧率(只对摄像头有效)
CV_CAP_PROP_FOURCC - 表示codec的四个字符(只对摄像头有效)
value:属性的值,本例中指的是视频文件的帧数
(IplImage*) cvQueryFrame( CvCapture* capture )
从视频文件结构中获取一帧,解压并返回,capture指向文件的下一帧。而返回的IplImage文件永远指向同一块内存,即该内存的内容是不断被覆盖掉的
阅读全文
0 0
- 《学习OpenCV》练习题第四章第四题
- 学习OpenCV第四章第四题答案
- 《学习opencv》第四章第四题
- 学习opencv ,第六章第四题
- 学习opencv第四章第三题
- 《学习OpenCV》练习题第二章第四题
- 《学习OpenCV》练习题第三章第四题
- 《学习OpenCV》练习题第四章第二题
- 《学习OpenCV》练习题第四章第六题
- 《学习OpenCV》练习题第三章第四题
- 学习OpenCV第四章第一题答案
- 学习OpenCV第四章第二题答案
- 学习OpenCV第四章第五题答案
- 《学习OpenCV》第四章课后题2
- 《学习OpenCV》第四章课后题4
- 《学习OpenCV》第四章课后题6
- 《学习OpenCV》第四章课后题7
- 《学习OpenCV》第四章课后题8
- 成长之路:大树哲学 2017.08.08
- (16)添加附件、删除附件
- Unity3D设计模式之观察者模式(16)(二)
- [Error] The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml ...
- String字符串对象方法的使用
- 《学习opencv》第四章第四题
- Volatile关键字
- 实训笔记之java基础学习
- 最优化算法(三)
- Java面试题2017版
- QQ日迹Omi实战开发,从0到1
- Python中字符串连接的5种方法
- UVA 100
- Ubuntu下面Master PDF Editor背景颜色设置