使用Vivado HLS在ZYNQ-7000上开发OPENCV的教程

2019-01-28 11:31:40 来源:网络
标签:

 

1. 背景知识

OPENCV(Open Source Computer Vision)被广泛的使用在计算机视觉开发上。使用Vivado HLS视频库在zynq-7000全可编程soc上加速OPENCV 应用的开发,将大大提升我们的计算机视觉开发。

 

图1和图2展示了如何使用opencv加速zynq-7000全可编程 soc的计算机视觉开发。

 

1> 使用Vivado HLS开发opencv的计算机视觉IP;

 

2> 将IP添加到SOC系统中

 

3> 验证和下板实验

 

本次重点为HLS的图像读入显示,视频读入显示,以及摄像头的读入显示。

 

2. HLS 使用到的函数

 

enum

{

/* 8bit,color or not */

CV_LOAD_IMAGE_UNCHANGED =-1,//读取图像的原通道数

/* 8bit,gray */

CV_LOAD_IMAGE_GRAYSCALE =0,//读取灰度图片

/* ?,color */

CV_LOAD_IMAGE_COLOR =1,//读取彩色图片

/* anydepth, ? */

CV_LOAD_IMAGE_ANYDEPTH =2,//任意深度

/* ?,any color */

CV_LOAD_IMAGE_ANYCOLOR =4//任意颜色

};

/* loadimage from file

iscolor can be a combination of aboveflags where CV_LOAD_IMAGE_UNCHANGED

overrides the other flags

using CV_LOAD_IMAGE_ANYCOLOR alone isequivalent to CV_LOAD_IMAGE_UNCHANGED

unless CV_LOAD_IMAGE_ANYDEPTH is specifiedimages are converted to 8bit

*/

CVAPI(IplImage*) cvLoadImage(constchar*filename, int iscolor CV_DEFAULT(CV_LOAD_IMAGE_COLOR));

 

Filename 文件名

 

Iscolor 图像的颜色和深度

 

使用方法:

IplImage*src = cvLoadImage(filename,CV_LOAD_IMAGE_GRAYSCALE);

 

其他函数可以采用点击右键 open declaraTIon查看。

 

Test.cpp 源码:

 

#include"Test.h"

#include"hls_opencv.h"

usingnamespace cv;

int main (int argc, char**argv) {

/*

//方法1 cvLoadImage函数加载图片

IplImage* src =cvLoadImage(INPUT_IMAGE,CV_LOAD_IMAGE_GRAYSCALE);

IplImage* dst =cvCreateImage(cvGetSize(src), src->depth, src->nChannels);//获取原始图像大小

AXI_STREAM src_axi, dst_axi;

IplImage2AXIvideo(src, src_axi);

AXIvideo2IplImage(src_axi, dst);

cvSaveImage(OUTPUT_IMAGE, dst);

cvShowImage( "result_1080p",dst);

cvReleaseImage(&src);

cvWaitKey();

*/

/*

//方法2 cvLoadImage函数加载图片

Mat src_rgb = imread(INPUT_IMAGE,CV_LOAD_IMAGE_COLOR);//加载图片并灰度显示

IplImage src = src_rgb;

cvSaveImage(OUTPUT_IMAGE, &src);

cvShowImage("src",&src);

waitKey(0);

return 0;

*/

/*

//读取视频文件

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;

*/

//摄像头操作

IplImage *frame;

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

cvNamedWindow("AVIplayer",0);

while(true)

{

if(cvGrabFrame(capture))

{

frame = cvRetrieveFrame(capture);

cvShowImage("AVIplayer",frame);

if(cvWaitKey(10)>=0)break;

}

else

{

break;//没有采集到视频数据退出

}

}

cvReleaseCapture(&capture);

cvDestroyWindow("AVIplayer");

return 0;

}

Test.h源码:

#ifndef_TOP_H_

#define_TOP_H_

#include"hls_video.h"

//maximum image size

#defineMAX_WIDTH 1920

#defineMAX_HEIGHT 1080

// I/OImage SetTIngs

#defineINPUT_IMAGE "test_1080p.jpg"

#defineOUTPUT_IMAGE "result_1080p.bmp"

#defineOUTPUT_IMAGE_GOLDEN "result_1080p_golden.bmp"

//typedef video library core structures

typedef hls::stream> AXI_STREAM;

typedef hls::Scalar<3, unsignedchar> RGB_PIXEL;

typedef hls::Mat RGB_IMAGE;

#endif

 

3. VIVADO HLS图像获取实验

对于工程的创建请参考《HLS入门一》

实验原图1

 

//方法1cvLoadImage函数加载图片

IplImage* src = cvLoadImage(INPUT_IMAGE,CV_LOAD_IMAGE_GRAYSCALE);

实验结果1

 

//读取视频文件

IplImage *frame;

CvCapture *capture = cvCaptureFromAVI("1.avi");//获取视频数据

cvNamedWindow("AVIplayer",0);

 
关注与非网微信 ( ee-focus )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

继续阅读
自动驾驶技术遭遇五大质疑,特斯拉要如何解释?
自动驾驶技术遭遇五大质疑,特斯拉要如何解释?

特斯拉将于本月22日举行一次自动驾驶投资者日活动,希望它能够在这次活动上提供一些自己在自动驾驶研发工作方面的细节

这家上市了20年的AI厂商竟默默无闻?如今迎来爆发期会如何发展?

今年来,以深度学习为核心的人工智能技术得到广泛引用,而2018年图灵奖颁给了深度学习领域三剑客。得益于深度学习与机器学习等AI技术迅猛发展,并应用各行业,特别在物联网部署规模进一步扩大后,企业有能力获得无限数据,并经过AI技术处理可以从中实现快速创新。

苹果聘请3D相机专家阿瑟·范霍夫,为汽车项目的计算机视觉项目做准备?

苹果公司近期聘请了3D相机专家阿瑟·范霍夫(Arthur Van Hoff),出任一个未具名项目的高级架构师。

计算机视觉已到瓶颈期?三维重建或许是出路
计算机视觉已到瓶颈期?三维重建或许是出路

不过当前计算机视觉的研究和应用主要集中在“识别”上,“识别”只是计算机视觉的一部分,如果要去做一些交互和感知,必须先恢复三维,所以在识别的基础上,下一个层次必须走向“三维重建”。

英特尔掏1.17 亿美元投资科技创业公司,云拿科技和珠海亿智在列

当地时间4月1日,英特尔投资在英特尔投资全球峰会上宣布,向14家科技创业公司新投资总计1.17亿美元,此次被投公司包括2家中国公司云拿科技和亿智电子,以及吴恩达博士于美国加州创办的Landing AI。

更多资讯
【技术分享】《FPGA之道》之Verilog中的生成语句

本文的内容摘录自《FPGA之道》(狄超,刘萌著,西安交通大学出版社)。

英特尔大牛分享FPGA 编程模型,引起学生热烈追捧

身处数据洪流的时代,这不仅意味着数据量的爆炸式增长,更体现在数据形态和格式正发生着革命性的变化,数据的处理方式也发生了端到端的沿伸。而通过与英特尔端到端的计算技术相结合,FPGA可以更好的释放数据的巨大潜能。

【技术分享】在FPGA上使用微处理器软核/硬核的教程
【技术分享】在FPGA上使用微处理器软核/硬核的教程

有时,微控制器本身可以完全吸收设计的所有功能要求。对于绝大多数嵌入式系统设计而言,编程良好,高度集成的嵌入式处理器是工程师可以使用的最具成本效益,功效最高,速度最快的解决方案。

【技术分享】FPGA市场走向分析,纵横融合是主要方向
【技术分享】FPGA市场走向分析,纵横融合是主要方向

FPGA在先进工艺路上的狂飚猛进带来了如影随形的挑战:一方面,进入20nm和14nm阶段后,不光是FPGA复杂度提升,对其外围的电源管理等芯片也提出了“与时俱进”的要求。

【技术分享】英特尔10纳米Agilex FPGA核心技术全解读

英特尔的10纳米FPGA终于来了。在四月刚刚结束的英特尔“以数据为中心创新日”中,曾经代号为Falcon Mesa的英特尔最新一代10纳米FPGA正式亮相,并正式命名为Agilex™。

电路方案