视频图像处理基础-获取图像的仿真数据流

zynq架构之别人整理http://xilinx.eetrend.com/blog/4415

在验证算法时,首先第一步就是如何载入图片进行验证,这里的图像包括图像,视频数据流,外部摄像头的调用~

HLS中两种基础的加载方法:

1)通过 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 函数读取图片显示

源码及结果如下图:

 

 1 IplImage* src = cvLoadImage(INPUT_IMAGE);
 3 IplImage* dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);//获取原始图像大 小
 5 AXI_STREAM src_axi, dst_axi;
 7 IplImage2AXIvideo(src, src_axi);
 9 AXIvideo2IplImage(src_axi, dst);
11 cvSaveImage(OUTPUT_IMAGE, dst);
13 cvShowImage( "result_1080p",dst);

2)通过Imreadd函数读取图片

格式: Mat src_rgb = imread(INPUT_IMAGE); IplImage src = src_rgb; cvShowImage("src",&src);

首先,我们看 imread 函数,可以在官方文档中查到其原型如下: CV_EXPORTS_W Mat imread( const string& filename, int flags=1 );

第一个参数,const string&类型的 filename,填我们需要载入的图片路径名。

第二个参数,int 类型的 flags,为载入标识,它指定一个加载图像的颜色类型。可以看到它自带 缺省值 1.所以有时候这个参数在调用时我们可以忽略,如 果在调用时忽略这个参数,就表示载入三通道的彩色图像。

再举一个简单的小栗子:

1 Mat src_rgb = imread(INPUT_IMAGE,CV_LOAD_IMAGE_GRAYSCALE);//加载图片并灰度显示
2 IplImage src = src_rgb;
3 cvSaveImage(OUTPUT_IMAGE, &src);
4 cvShowImage("src",&src);

3.3 视频流文件的载入

cvCaptureFromAVI 函数进行视频文件的载入

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

功能:用来播放 AVI 文件视频;

用 cvCaptureFromAVI()跟 cvCaptureFromFile(),cvCreateFileCapture()都是一样的作 用;文件的类型不一定必须是 AVI 格式,只要文件符合 OpenCV 支持的格式就能播放。

格式:int cvGrabFrame(CvCapture 结构体)

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

格式:cvRetrieveFrame(CvCapture 结构);

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

举一个小例子:

 1 IplImage *frame;
 2 CvCapture *capture = cvCaptureFromAVI("1.avi");//获取视频数据
 3 cvNamedWindow("AVI player",0);
 4 while(true)
 5 {
 6 if(cvGrabFrame(capture))
 7 {
 8  frame = cvRetrieveFrame(capture);
 9 cvShowImage("AVI player",frame);
10 if(cvWaitKey(10)>=0) break;
11 }
12 }

 

3.4 外部摄像头的调用

CvCapture*cvCaptureFromCAM( int index );

参数:index 要使用的摄像头索引。释放这个结构,使用函数 cvReleaseCapture。

要将视频写入文件中,使用 cvWriteFrame 写入一帧到一个视频文件中 int cvWriteFrame( CvVideoWriter* writer, const IplImage* image );

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

IplImage *frame; CvCapture *capture = cvCaptureFromCAM(1);//捕获摄像头数据0--笔记本自带摄像头 1--外部摄像头

posted on 2018-06-30 22:18  super_star123  阅读(1169)  评论(0编辑  收藏  举报

导航