hls之xfopencv

  1. 为什么要引入xfopencv

vivado本身集成了opencv库以及hls视频库了,opencv不能被综合导出为RTL电路,hls视频库的功能有所欠缺,因此引入xfopencv作为既可以被综合导出为RTL电路,也能够实现opencv丰富的功能。

2.软件环境

vivado 2019.1,包含vivado,hls,以及SDSOC套件。

3.下载

1.打开github直接搜索xfopencv,如图所示

hls之xfopencv_第1张图片

2.点击master->tags->选择与本身vivado匹配的版本(我的版本是2019.1,所以选择第一个)

hls之xfopencv_第2张图片

4.使用(xfopencv/examples/canny)

1.解压下载的文档,创建HLS工程,右击source->add files,添加文件如如所示

hls之xfopencv_第3张图片

2.右击Test Bench->add files,添加如下文件,其中im0.jpg在data文件夹

b0695a913c47ac2599dd15ae40b7d98d.png

3.选中project->settings->syntheis 添加顶层文件,如图所示

hls之xfopencv_第4张图片

4.然后选中xf_canny_accel.cpp文件,选择Edit GFLAS Dialog,用于添加xfopencv库,添加内容

-I <路径 to your xfopencv> -D__(双下划线)SDSVHLS__(双下划线)。

hls之xfopencv_第5张图片

5.然后选择Simulation,对tb文件添加xfopencv库,方式同上,内容如下

-I <路径 to your xfopencv> -D__(双下划线)SDSVHLS__(双下划线) -std=c++0x

hls之xfopencv_第6张图片

5.综合以及C仿真

1.综合

由于xf_canny_accel.cpp文件中的XF_USE_URAM未被定义,删掉后综合才能不出错

原始代码

xf::Canny(_src,_dst1,low_threshold,high_threshold);
  //xf::xfMat2AXIvideo(nms_output, _dst1);
  #pragma SDS wait(1)
  //xf::AXIvideo2xfMat(_dst1, nms_output);
  xf::EdgeTracing(_dst1,_dst2);

更改以后的代码

xf::Canny(_src,_dst1,low_threshold,high_threshold);
  //xf::xfMat2AXIvideo(nms_output, _dst1);
  #pragma SDS wait(1)
  //xf::AXIvideo2xfMat(_dst1, nms_output);
  xf::EdgeTracing(_dst1,_dst2);
  //xf::xfMat2AXIvideo(edge_output, _dst2);
}

2.C仿真

选择im0.jpg作为输入图片

原始图像:

hls之xfopencv_第7张图片

opencv处理图像:

hls之xfopencv_第8张图片

xfopencv处理图像:

hls之xfopencv_第9张图片

以上为xfopencv的例子学习,关于xfopencv更加详细的介绍请参考xilinx官方文档ug1233

你可能感兴趣的:(python,opencv,java,计算机视觉,深度学习)