电子说
为什么要引入xfopencv
vivado本身集成了opencv库以及hls视频库了,opencv不能被综合导出为RTL电路,hls视频库的功能有所欠缺,因此引入xfopencv作为既可以被综合导出为RTL电路,也能够实现opencv丰富的功能。
2.软件环境
vivado 2019.1,包含vivado,hls,以及SDSOC套件。
3.下载
1.打开github直接搜索xfopencv,如图所示
2.点击master->tags->选择与本身vivado匹配的版本(我的版本是2019.1,所以选择第一个)
4.使用(xfopencv/examples/canny)
1.解压下载的文档,创建HLS工程,右击source->add files,添加文件如如所示
2.右击Test Bench->add files,添加如下文件,其中im0.jpg在data文件夹
3.选中project->settings->syntheis 添加顶层文件,如图所示
4.然后选中xf_canny_accel.cpp文件,选择Edit GFLAS Dialog,用于添加xfopencv库,添加内容
-I <路径 to your xfopencv> -D__(双下划线)SDSVHLS__(双下划线)。
5.然后选择Simulation,对tb文件添加xfopencv库,方式同上,内容如下
-I <路径 to your xfopencv> -D__(双下划线)SDSVHLS__(双下划线) -std=c++0x
5.综合以及C仿真
1.综合
由于xf_canny_accel.cpp文件中的XF_USE_URAM未被定义,删掉后综合才能不出错
原始代码
xf::Canny
(_src,_dst1,low_threshold,high_threshold); //xf::xfMat2AXIvideo(nms_output, _dst1);
//xf::AXIvideo2xfMat(_dst1, nms_output);
xf::EdgeTracing
(_dst1,_dst2);
更改以后的代码
xf::Canny
(_src,_dst1,low_threshold,high_threshold); //xf::xfMat2AXIvideo(nms_output, _dst1);
//xf::AXIvideo2xfMat(_dst1, nms_output);
xf::EdgeTracing
(_dst1,_dst2); //xf::xfMat2AXIvideo(edge_output, _dst2);
}
2.C仿真
选择im0.jpg作为输入图片
原始图像:
opencv处理图像:
xfopencv处理图像:
以上为xfopencv的例子学习,关于xfopencv更加详细的介绍请参考xilinx官方文档ug1233
审核编辑 :李倩
全部0条评论
快来发表一下你的评论吧 !