您的位置:首页 > 运维架构

opencv第二章-显示一张图片和播放avi视频

2015-10-15 10:59 405 查看
opencv第二章-显示一张图片和播放avi视频

1)显示一张图片

#include <opencv2/opencv.hpp> //头文件

using namespace cv; //包含cv命名空间

void main( )

{

// 【1】读入一张图片,载入图像

Mat srcImage = imread("1.jpg");

// 【2】显示载入的图片

imshow("【原始图】",srcImage);

// 【3】等待任意按键按下

waitKey(0);

}

(a)这是最新版的显示图片程序,省略了很多创建窗口和关闭窗口的程序。来看一下每句话的意思:

Mat srcImage = imread("1.jpg");//创建图像矩阵,矩阵元素为图像的像素,读入了图像。

(b)读入函数imread()的原型如下:

CV_EXPORTS_W Mat imread( const string& filename, int flags=1 )

第一个参数是文件路径,就是文件名,用双引号来表示文件名字符串

第二个参数是图像的大小,默认为1,就是原图。

(c)waitKye(0)的原型如下:

CV_EXPORTS_W int waitKey(int delay=0);

括号内的参数delay是表示要延时的时间,单位是ms毫秒。

(c)imshow()函数

CV_EXPORTS_W void imshow( const string& winname, InputArray mat );

第一个参数是要显示的窗口名称,用双引号来表示字符串

第二个参数是要显示的图像矩阵

2)老版本的程序如下:

int main()

{

IplImage *img=cvLoadImage("1.jpg");

cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE);

cvShowImage("Example1",img);

cvWaitKey(0);

cvReleaseImage(&img);

cvDestroyWindow("Example1");

}

3)播放avi视频

#include <opencv2/opencv.hpp> //头文件

using namespace cv; //包含cv命名空间

int main( )

{

//【1】读入视频

VideoCapture capture("1.avi");

//【2】循环显示每一帧

while(1)

{

Mat frame;//定义一个Mat变量,用于存储每一帧的图像

capture>>frame; //读取当前帧

imshow("读取视频",frame); //显示当前帧

waitKey(30); //延时30ms

}

return 0;

}

使用opencv播放视频,几乎与使用它来显示图像一样容易,播放视频时只需要处理的新问题就是如何循环地顺序读取视频中的每一帧,以及如何从枯燥的电影视频的读取中退出该循环操作。我们先来看一下这个类VideoCapture。

(a)VideoCapture

class CV_EXPORTS_W VideoCapture

{

public:

CV_WRAP VideoCapture();

CV_WRAP VideoCapture(const string& filename);

CV_WRAP VideoCapture(int device);

virtual ~VideoCapture();

CV_WRAP virtual bool open(const string& filename);

CV_WRAP virtual bool open(int device);

CV_WRAP virtual bool isOpened() const;

CV_WRAP virtual void release();

CV_WRAP virtual bool grab();

CV_WRAP virtual bool retrieve(CV_OUT Mat& image, int channel=0);

virtual VideoCapture& operator >> (CV_OUT Mat& image);

CV_WRAP virtual bool read(CV_OUT Mat& image);

CV_WRAP virtual bool set(int propId, double value);

CV_WRAP virtual double get(int propId);

protected:

Ptr<CvCapture> cap;

};

这个类里面有很多函数,用到哪个学哪个。

一般添加这个用来检测视频读取是否出错

if(!capture.isOpened())

{ cout<<"there is no this file";

exit(0);

}

如果出错,则输出出错信息,并退出程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: