图片、视频、摄像头的获取方法

借鉴与米联客《XILINX7 系列FPGA HLS入门》实验指导书第三章部分.

1.图片加载方法

方法一:通过 cvLoadImage 函数加载图片

cvLoadImage 函数

格式

通过 cvLoadImage 函数加载图片格式如下
IplImage* src = cvLoadImage(INPUT_IMAGE);
cvShowImage(“src”,src);

函数原型

IplImage* cvLoadImage(const char*filename,int iscolor CV_DEFAULT (CV_LOAD_IMAGE_COLOR));
filename :要被读入的文件的文件名(包括后缀);
iscolor:指定读入图像的颜色和深度;
指定的颜色可以将输入的图片转为 3 信道(CV_LOAD_IMAGE_COLOR),单信道(CV_LOAD_IMAGE_GRAYSCALE),或者保持不变(CV_LOAD_IMAGE_ANYCOLOR)。

使用方法:

cvLoadImage 函数使用方法有下面几种
cvLoadImage( filename, -1 ); 默认读取图像的原通道数
cvLoadImage( filename, 0 ); 强制转化读取图像为灰度图
cvLoadImage( filename, 1 ); 读取彩色图

实例

IplImage* src = cvLoadImage(INPUT_IMAGE);
IplImage* dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);//获取原始图像大小
AXI_STREAM src_axi;
IplImage2AXIvideo(src, src_axi);
AXIvideo2IplImage(src_axi, dst);
cvSaveImage(OUTPUT_IMAGE, dst);
cvShowImage( “result_1080p”,dst);

方法2:通过imread函数读取图片

imread函数

格式

Mat src_rgb = imread(INPUT_IMAGE); IplImage src = src_rgb;
cvShowImage(“src”,&src);

函数原型

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

参数 1:const string&类型的 filename,填我们需要载入的图片路径名。 参数 2:int 类型的 flags,为载入标识,它指定一个加载图像的颜色类型。

示例

我们通过 imread 函数读取一副图片并且灰度显示的代码如下:
Mat src_rgb = imread(INPUT_IMAGE,CV_LOAD_IMAGE_GRAYSCALE);//加载图片并灰度显示 IplImage src = src_rgb;
cvSaveImage(OUTPUT_IMAGE, &src);
cvShowImage(“src”,&src);

2.视频文件的载入

cvCaptureFromAVI 函数

格式:cvCaptureFromAVI(“AVI 文件名称”);

功能:函数进行视频文件的载入,用来播放 AVI 文件视频;

cvGrabFrame 函数

格式:int cvGrabFrame(CvCapture 结构体); 功能:将 capture 抓下來的相片放在 OpenCV 中;其与 cvQueryFrame()是相同的步骤;
cvGrabFrame()返回值为 0 或 1;0 是失败,1 是成功。

cvRetrieveFrame 函数

格式:cvRetrieveFrame(CvCapture 结构);
功能:从 OpenCV 快取中得到 Frame,并配置给 IplImage 结构体;其中:
cvQueryFrame()=cvGrabFrame()+cvRetrieveFrame().

cvNamedWindow

格式:int cvNamedWindow( const char* name, int flags=CV_WINDOW_AUTOSIZE ); name :窗口的名字,它被用来区分不同的窗口,并被显示为窗口标题。 flags  :窗口属性标志。可以选择CV_WINDOW_AUTOSIZE(1)和0两种值。CV_WINDOW_AUTOSIZE这个标志被设置后, 如果用户不能手动改变窗口大小,窗口大小会自动调整以适合被显示图像(参考cvShowImage)。0表示用户可以手动调节窗口大小,且显示的图像尺寸随之变化。

功能:用来创建指定的窗口

示例

cvNamedWindow(“video”, 1);//创建了一个名为video的窗口。

也可以cvNamedWindow(“video”); //创建了一个名为video的窗口。

cvDestroyWindow

格式:void cvDestroyWindow( const char* name );

name :要被销毁的窗口的名字。 功能 :销毁指定名字的窗口。

示例

IplImage *frame;
CvCapture *capture = cvCaptureFromAVI("1.avi");//获取视频数据
cvNamedWindow ("AVI player",0);
while(true)
{
if(cvGrabFrame(capture))
{
frame=cvRetrieveFrame(capture);
cvShowImage("AVI player",frame);
if(cvWaitKey(10)>0) break;  
 }
    else
    {
        break;
    }
}
cvReleaseCapture(&capture);
cvDestroyWindow("AVI player");

return 0;

3.外部摄像头的调用

cvCaptureFromCAM 函数

格式:CvCapture*cvCaptureFromCAM( int index );

参数:index,要使用的摄像头索引。

cvReleaseCapture 函数

功能:释放(cvCaptureFromCAM)这个结构,使用函数 cvReleaseCapture。

cvWriteFrame 函数

功能:要将视频写入文件中,使用 cvWriteFrame 写入一帧到一个视频文件中

格式:int cvWriteFrame( CvVideoWriter* writer, const IplImage* image );

示例:

通过摄像头捕获视频数据的关键代码如下,并且通过调用外部 USB 摄像头成功采集到视频数据,为后期算法验证提供测试依据。

IplImage *frame;
CvCapture *capture=cvCaptureFromCAM(1);//捕获摄像头数据0--笔记本自带摄像头  1--外接摄像头
cvNamedWindow("AVI player",1);
while(true)
{
if(cvGrabFrame(capture))
{
frame=cvRetrieveFrame(capture);
cvShowImage("AVI player",frame);
if(cvWaitKey(10)>=0)break;    
}
    else
    {
        break;//没有采集到视频数据退出
    }
}
cvReleaseCapture(&capture);
cvDestroyWindow("AVI player");
return 0;

发表回复