借鉴与米联客《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;
