使用opencv播放视频

使用opencv播放视频,只要通过循环顺序读取视频中的每一帧,并显示一定的时间即可。

一:主要函数介绍
1.1
函数功能:初始化从文件中获取视频
函数原型:
CvCapture *cvCreateFileCapture(const char*filename);

1.2
函数功能:从摄像头或者文件中抓取并返回一帧
函数原型:
IplImage *cvQueryFrame(CvCapture *capture);
函数说明:
函数将下一帧视频文件更新到capture中,返回一个对应当前帧的指针

1.3
函数功能:对图像进行平滑处理
函数原型:
void cvSmooth(const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0, double param4=0);
函数说明:
       src  输入图像,
       dst  输出图像,
       smoothtype  平滑方法,值如下
        CV_BLUR_NO_SCALE(简单不带尺度变换的模糊) - 对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。
CV_BLUR (simple blur)- 对每个象素param1×param2邻域 求和并做尺度变换 1/(param1?param2).
CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积
CV_MEDIAN (median blur)- 对图像进行核大小为param1×param1 的中值滤波 (i.e. 邻域是方的).
CV_BILATERAL(双向滤波) - 应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2. 
param1
平滑操作的第一个参数.
param2
平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果param2的值 为零,则表示其被设定为param1。
param3
对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算:
sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核,
n=param2 对应垂直核.
对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有 sigma 计算 (以保证足够精确的操作).

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>

using namespace std;
using namespace cv;

int gSliderPosition = 1;
CvCapture *gcvCapture = NULL;

//cvCreateTrackbar的回调函数
void on_change( int pos)
{
            cvSetCaptureProperty(gcvCapture,CV_CAP_PROP_POS_FRAMES,pos);
}

//创建滑动条,对视频进行控制
void CreateTrackbar( char *pWindTitle, int frames)
{
            
            cvCreateTrackbar( "position" ,pWindTitle,&gSliderPosition,frames,on_change);
             int position = 1;
            on_change(position);
}

int main()
{
             char *pWindowTitle = "video" ;
             //读取视频文件
            cvNamedWindow(pWindowTitle,CV_WINDOW_AUTOSIZE);
            gcvCapture = cvCreateFileCapture( "141.avi" );
            
             int frames = ( int )cvGetCaptureProperty(gcvCapture,CV_CAP_PROP_FRAME_COUNT);     //获取视频总帧数

             if (0 != frames)
            {
                         //创建滑动条
                        CreateTrackbar(pWindowTitle,frames);
            }
            IplImage *pImage = NULL;
            

             while (1)
            {          
                         //获取文件的每一帧
                        pImage = cvQueryFrame(gcvCapture);

                         //对图像进行平滑处理
                        cvSmooth(pImage,pImage);

                         if (!pImage)
                                     break ;
                        cvShowImage(pWindowTitle,pImage);
                         char c = cvWaitKey(2);                        

                         if (c==27)                      //按esc退出
                                     break ;
            }
            cvReleaseCapture(&gcvCapture);
            cvDestroyAllWindows();
            
             return 0;
}

程序运行如下:

源代码下载
源代码中没有视频文件,下载后请拷贝一个视频到包含main.cpp的文件下,并改名为“001.avi”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值