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

 

继续阅读
中国欲将 AI 领军全球,但被这几个因素阻碍

中国希望在人工智能(AI)领域领军全球,且AI研究质量已取得令人印象深刻的飞跃。但观察人士警告说,有几个因素或将阻碍中国的AI计划,包括缺乏对用于开发支撑该领域的理论的贡献,以及中国企业不愿对实现根本性突破所需的研究进行投资。

WAIE大战“利奇马”,3万真粉如约驾临“WAIE 2019第四届上海国际人工智能展览会暨人工智能产业大会”

8月10日,由中国高科技行业门户OFweek维科网主办的“WAIE 2019第四届上海国际人工智能展览会暨人工智能产业大会”在三位国内外AI领域顶级院士、二十多位高校教授专家、200多位AI应用践行先锋企业领导人以及3万名专业观众的全力支持下,迎战华东地区近70年来第三大台风“利奇马”,畅飨年度AI盛宴。

原 360 副总裁加入依图,加速“让 AI 落地”理念

摘要: 作为首席技术官,颜水成将与依图团队一起,进一步加强 AI 基础研究。同时,为依图找到更多的技术型人才,也是颜水成的重要任务之一。

计算机视觉与机器视觉有什么区别?
计算机视觉与机器视觉有什么区别?

人工智能是一个涵盖几种特定技术的总称。本文我们将探索机器视觉(MV)和计算机视觉(CV)。它们都涉及到视觉输入,因此了解这些重叠技术的优势,局限性和最佳用例场景非常重要。

Trax完成1亿美元融资 厚朴投资领投

领先的零售业计算机视觉和分析解决方案提供商Trax今日宣布完成1亿美元的D轮融资,由厚朴投资领投。

更多资讯
FPGA近期频频刷“存在感”,它究竟有什么特别之处?

日前赛灵思推出最大容量FPGA芯片,阿里达摩院也发布了关于AI语音的FPGA芯片技术。FPGA芯片有何特别之处?它和当下最热的5G、AI领域又有何关系呢?据媒体报道,全球最大的可编程芯片(FPGA)厂

基于Verilog的UART接口电路设计
基于Verilog的UART接口电路设计

UART(UniversalAnynchrONousReceiverTransmitter,通用异步接收发送器)是广泛应用的串行数据传输协议之一,其应用范围遍及计算机外设、工控自动化等场合。

使用FPGA加速广告推荐算法的教程

在这篇文章里你可以了解到广告推荐算法 Wide and deep 模型的相关知识和搭建方法,还能了解到模型优化和评估的方式。我还为你准备了将模型部署到 FPGA 上做硬件加速的方法,希望对你有帮助。阅读这篇文章你可能需要 20 分钟的时间。

IBM宣布开源Power架构,国产处理器的另一个机会?
IBM宣布开源Power架构,国产处理器的另一个机会?

在正在进行的北美 OpenPOWER 峰会上,IBM 宣布开源 Power 芯片指令集架构(ISA,Instruction Set Architecture)。

继世界最大AI芯片诞生后,赛灵思发布最大FPGA芯片
继世界最大AI芯片诞生后,赛灵思发布最大FPGA芯片

赛灵思(Xilinx)今天宣布推出世界最大的FPGA芯片“Virtex UltraScale+ VU19P”,拥有多达350亿个晶体管,密度在同类产品中也是最大的,相比上代Virtex UltraScale VU440增大了1.6倍,而功耗降低了60%。