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--外部摄像头