使用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 )
限量版产业观察、行业动态、技术大餐每日推荐
享受快时代的精品慢阅读
 

 

继续阅读
巧用Vivado中的Intime 设计探索工具优化RTL代码

用软件从 C 转化来的 RTL 代码其实并不好理解。今天我们就来谈谈,如何在不改变 RTL 代码的情况下,提升设计性能。

英特尔推出一款新的RealSense摄像头,竟然能让机器有位置感?
英特尔推出一款新的RealSense摄像头,竟然能让机器有位置感?

近日,据外媒报道,英特尔正在推出一款新的RealSense摄像头,它的设计初衷是给机器一种位置感,其重点是让硬件制造商能够帮助他们的产品了解自己在世界上的位置。RealSense跟踪摄像头T265的设计是为了方便地展示机器人和AR/VR硬件与由内向外的跟踪技术。

无人机技术在未来应用前景广阔,消费级的无人机做到什么程度了?
无人机技术在未来应用前景广阔,消费级的无人机做到什么程度了?

无人机是一项大生意,高盛最近预测,到2020年,无人机市场将增长到1000亿美元。这些预测部分得源于无人机已成为大量新兴技术的平台,这些技术融合在一起可实现前所未有的应用。

计算机视觉可以对目标进行识别、跟踪、测量,未来还能增加什么新功能?
计算机视觉可以对目标进行识别、跟踪、测量,未来还能增加什么新功能?

近年来,为了使计算机更像人类,识别物体,深度学习,计算机视觉技术方法和应用迅速发展,全球计算机视觉市场正在迅速崛起。随着人工智能产业的升温,计算机视觉行业也在加速扩张。

一文看懂哪些恶劣环境条件会让自动驾驶AI算法大打折扣
一文看懂哪些恶劣环境条件会让自动驾驶AI算法大打折扣

美国汽车制造中心(center of U.S. auto manufacturing)最近发布一份报告给人工智能(AI)热泼了一盆冷水,研究结果表明,自动驾驶汽车算法在恶劣天气条件下表现并不佳。

更多资讯
PLC的面向对象编程实现方式

面向对象编程是计算机高级语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多优秀特点如“继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程的基本概念就是类和类的实例(即对象),我们只需要使用这种概念就可以了。

ASIC项目瀑布式开发流程详解

最近收拾书架,翻出一张多年以前的ASIC项目开发流程图,一起回顾一下。

智能门锁不安全?工程师自己造了一个AI人脸识别门锁
智能门锁不安全?工程师自己造了一个AI人脸识别门锁

展示了AI如何在Ultra96和Intel Movidius NCS以及Tensorflow Inception Facenet上运行。 该项目可以扩展到使用面部识别来解锁,记录进出情况,打开不同的灯光场景。

芯片厂商营收整体看衰赛灵思却逆势增长34%,凭什么
芯片厂商营收整体看衰赛灵思却逆势增长34%,凭什么

赛灵思可编程芯片产品市场的不断增长推动它的发展壮大,5G网络的推出也是它继续前行的助推器。

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

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

电路方案