Vitis Accelerated Libraries 学习笔记--OpenCV 运行测试

目录

[1. 简介](#1. 简介)

[2. 实例测试](#2. 实例测试)

[2.1 实例介绍](#2.1 实例介绍)

[2.1 创建工程](#2.1 创建工程)

[3 常见错误](#3 常见错误)

[3.1 核心共享库报错](#3.1 核心共享库报错)

[4. 总结](#4. 总结)


1. 简介

在《Vitis Accelerated Libraries 学习笔记--OpenCV 安装指南-CSDN博客》一文中,我详尽地介绍了 OpenCV 的安装过程。尽管 Vitis Vision 库的实现本身并不依赖于 OpenCV,但要运行库中的示例设计,OpenCV 是必需的。此外,在用户的测试平台上验证算法时,也可能会用到 OpenCV。在本文中,我们将深入探讨如何有效地利用 OpenCV 库来执行测试,确保您的设计能够在实际环境中达到预期的性能。

本文基于你了解 OpenCV 库的基本功能和它在图像处理和计算机视觉中的应用,然后,我会详细说明如何将 OpenCV 集成到 Vitis Vision 库的工作流中,以及如何使用 OpenCV 提供的函数来创建测试用例和验证设计。

2. 实例测试

2.1 实例介绍

以 Vitis Vision Library 中的 resize 内核为例,它的主要功能是执行图像的缩放操作。在 Vitis_Libraries/vision/L1/tests/resize/ 目录下,你会发现一系列文件夹,这些文件夹代表了不同的测试用例,用于验证和展示 resize 内核的功能:

  • resize_NPPC1_8UC1_8UC1_AREA
  • resize_NPPC1_8UC1_8UC1_BILINEAR
  • resize_NPPC1_8UC1_8UC1_NN
  • resize_NPPC1_8UC3_8UC3_AREA
  • resize_NPPC1_8UC3_8UC3_BILINEAR
  • resize_NPPC1_8UC3_8UC3_NN
  • resize_NPPC8_8UC1_8UC1_AREA
  • resize_NPPC8_8UC1_8UC1_BILINEAR
  • resize_NPPC8_8UC1_8UC1_NN
  • resize_NPPC8_8UC3_8UC3_AREA
  • resize_NPPC8_8UC3_8UC3_BILINEAR
  • resize_NPPC8_8UC3_8UC3_NN

我们先来了解一下这些文件夹的命名含义:

  • NPPC1 或 NPPC8: 这代表每个像素时钟周期(Number of Pixels Per Clock)的数量。NPPC1 表示每个时钟周期处理一个像素,而 NPPC8 表示每个时钟周期处理八个像素。
  • 8UC1 或 8UC3: 这指的是图像的类型。8UC1 表示 8 位无符号单通道图像,而 8UC3 表示 8 位无符号三通道图像。
  • AREA, BILINEAR, NN: 这些是 resize 函数使用的不同插值方法。AREA 是面积插值,BILINEAR 是双线性插值,NN 是最近邻插值。

最近邻插值(Nearest Neighbor, NN) : 这是最简单的插值方法。它选择最接近目标位置的源像素值来填充目标像素。这种方法的计算速度快,但可能会导致图像在放大时出现块状效果。
双线性插值(Bilinear) : 双线性插值考虑了最近的四个像素点,并基于它们的距离,计算加权平均值来确定新像素的值。这种方法比最近邻插值平滑,但在某些情况下可能会引入模糊。
面积插值(Area): 面积插值是一种更复杂的方法,它考虑了源图像中多个像素的区域,并计算这些像素的平均值来确定目标像素的值。这种方法在缩小图像时特别有用,因为它可以减少混叠效应,通常能得到更平滑的结果。

每种方法都有其优点和适用场景。最近邻插值适合对计算速度要求高的场合,双线性插值在保持图像细节的同时提供了平滑的效果,而面积插值则在减少图像缩小时的失真方面表现出色。选择哪种插值方法取决于具体的应用需求和预期的图像质量。

2.1 创建工程

  1. 在 GUI 中,创建空白工程
bash 复制代码
source /opt/Xilinx/Vitis_HLS/2022.1/settings64.sh
vitis_hls -gui # 在GUI中创建空白工程
  1. 在 shell 中,确定目录位置各个目录位置:
bash 复制代码
pwd # 在 vision 目录下
pkg-config --cflags opencv4 | sed 's/-I//g'
pkg-config --libs-only-L opencv4  | sed 's/-L//g'
    1. 按顺序复制到此处
bash 复制代码
set XF_PROJ_ROOT /home/dong/Documents/vision
set OPENCV_INCLUDE /usr/local/include/opencv4
set OPENCV_LIB /usr/local/lib
    1. 进入 vitis_hls -i 赋值以上内容,三行分开复制
    1. 继续在 vitis_hls -i 中,运行如下内容(根据示例调整)
bash 复制代码
open_project NAME # 打开工程,可参考 get_project
add_files "${XF_PROJ_ROOT}/L1/examples/customconv/xf_custom_convolution_accel.cpp" -cflags " -I ${XF_PROJ_ROOT}/L1/examples/customconv/build -I${XF_PROJ_ROOT}/L1/include -I ./ -D__SDSVHLS__ -std=c++0x" -csimflags " -I ${XF_PROJ_ROOT}/L1/examples/customconv/build -I${XF_PROJ_ROOT}/L1/include -I ./ -D__SDSVHLS__ -std=c++0x"
add_files -tb "${XF_PROJ_ROOT}/L1/examples/customconv/xf_custom_convolution_tb.cpp" -cflags " -I ${XF_PROJ_ROOT}/L1/examples/customconv/build -I${OPENCV_INCLUDE} -I${XF_PROJ_ROOT}/L1/include -I ./ -D__SDSVHLS__ -std=c++0x" -csimflags " -I ${XF_PROJ_ROOT}/L1/examples/customconv/build -I${XF_PROJ_ROOT}/L1/include -I ./ -D__SDSVHLS__ -std=c++0x"
set_top Filter2d_accel
vitis_hls -p NAME 启动当前工程的 GUI 界面
    1. 根据示例,设置 csim 参数

3 常见错误

3.1 核心共享库报错

/xx/xx/.../: error while loading shared libraries: libopencv_imgcodecs.so.4.4: cannot open shared object file: No such file or directory

意味着程序无法找到OpenCV的核心共享库文件。

解决办法:

使用以下命令行查找包含共享库 libopencv_imgcodecs.so.4.4 的文件夹:

bash 复制代码
sudo find / -name "libopencv_imgcodecs.so.4.4"

创建一个名为 /etc/ld.so.conf.d/opencv.conf 的文件,并向其中写入存储二进制文件的文件夹的路径。例如,我将 /usr/local/lib/ 写入我的 opencv.conf 文件。按如下方式运行命令行:

bash 复制代码
sudo ldconfig -v

4. 总结

在本系列学习笔记中,我们探讨了 Vitis Accelerated Libraries 和 OpenCV 的结合使用,强调了 OpenCV 在运行 Vitis Vision 库示例设计和验证用户测试平台算法中的重要性。通过详细的安装指南和实例测试,我们展示了如何将 OpenCV 集成到 Vitis Vision 库的工作流中,并利用其强大的函数库来创建和验证测试用例。

我们还讨论了如何解决常见的错误,例如找不到 OpenCV 核心共享库文件的问题,确保开发环境的顺利设置。通过这些步骤,使我们的工程设计在实际环境中能够达到预期的性能,同时也能够更好地理解和利用 Vitis Vision 库和 OpenCV 的强大功能。

相关推荐
南宫生3 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__3 小时前
Web APIs学习 (操作DOM BOM)
学习
冷眼看人间恩怨3 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
ThreeYear_s5 小时前
基于FPGA 的4位密码锁 矩阵键盘 数码管显示 报警仿真
fpga开发·矩阵·计算机外设
数据的世界015 小时前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐5 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
菜狗woc5 小时前
opencv-python的简单练习
人工智能·python·opencv
西猫雷婶7 小时前
python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分
开发语言·python·opencv
OopspoO8 小时前
qcow2镜像大小压缩
学习·性能优化
A懿轩A8 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列