Vitis Accelerated Libraries 学习笔记--OpenCV 安装指南

news2024/11/23 1:08:04

目录

1. 简介

2. 安装过程

2.1 安装准备

2.2 常见错误

2.2.1 核心共享库报错

3. 通过实例测试 

4. 总结


1. 简介

使用Vitis Vision Library Vitis 视觉库,为什么要安装opencv库?

在使用Vitis Vision Library时,安装OpenCV库是因为许多视觉库的功能都提供了示例设计测试平台,使用OpenCV来演示加速内核的功能。虽然 Vitis Vision 库的内核实现并不依赖于 OpenCV,但OpenCV提供了一个广泛的集合功能,可以用来验证和测试Vitis Vision库中的加速内核。此外,OpenCV的使用可以帮助开发者更好地理解和验证他们的算法在实际场景中的性能。

本文提供了一个详细的步骤指南,包括必要的预置条件、如何创建源目录、从GitHub中复制OpenCV库以及如何设置环境变量等。

2. 安装过程

2.1 安装准备

先决条件:

  • 安装 Vitis 20xx.x
  • 安装 XRT

安装步骤:

  • 创建一个目录“source”并将 opencv-4.4.0 克隆到其中
  • 创建一个目录“source_contrib”并将 opencv-4.4.0-contrib 克隆到其中
  • 再创建 2 个目录: build 、 install
  • 打开 bash 终端并 cd 到 build 目录
  • 运行命令:export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/
  • 运行命令:
cmake .. -D CMAKE_BUILD_TYPE=RELEASE \
         -D CMAKE_INSTALL_PREFIX=/usr/local \
         -D WITH_V4L=ON \
         -D OPENCV_EXTRA_MODULES_PATH=../../source_contrib/modules \
         -DBUILD_TESTS=OFF -DBUILD_ZLIB=ON -DBUILD_JPEG=ON \
         -DWITH_JPEG=ON -DWITH_PNG=ON -DBUILD_EXAMPLES=OFF \
         -DINSTALL_C_EXAMPLES=OFF -DINSTALL_PYTHON_EXAMPLES=OFF \
         -DWITH_OPENEXR=OFF -DBUILD_OPENEXR=OFF \
         -DOPENCV_GENERATE_PKGCONFIG=ON \
         -D CMAKE_CXX_COMPILER=$XILINX_HLS/tps/lnx64/gcc-6.2.0/bin/g++
make all -j8
sudo make install

make all -j8

使用所有八个处理器核心(由“-j8”指定)来同时构建项目

  • OpenCV 包含文件和库将位于安装目录中

2.2 常见错误

2.2.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 的文件夹:

sudo find / -name "libopencv_imgcodecs.so.4.4"

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

sudo ldconfig -v

3. 通过实例测试 

  • 1. 在 GUI 中创建空白工程
source /opt/Xilinx/Vitis_HLS/2022.1/settings64.sh
vitis_hls -gui # 在GUI中创建空白工程
  • 2. 在 shell 中,确定目录位置各个目录位置:
pwd # 在 vision 目录下
pkg-config --cflags opencv4 | sed 's/-I//g'
pkg-config --libs-only-L opencv4  | sed 's/-L//g'
  • 3. 按顺序复制到此处
set XF_PROJ_ROOT /home/dong/Documents/vision
set OPENCV_INCLUDE /usr/local/include/opencv4
set OPENCV_LIB /usr/local/lib
  •  4. 进入 vitis_hls -i 赋值以上内容,三行分开复制
  • 5. 继续在 vitis_hls -i 中,运行如下内容(根据示例调整)
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 界面
  • 6. 根据示例,设置 csim 参数
csim_design -ldflags "-L ${OPENCV_LIB} -lopencv_imgcodecs -lopencv_imgproc -lopencv_core -lopencv_highgui -lopencv_flann -lopencv_features2d" -argv " ${XF_PROJ_ROOT}/data/128x128.png "

 

4. 总结

在使用Vitis Vision Library进行图像处理和计算机视觉项目时,OpenCV库的安装是为了提供一个功能强大的测试和验证平台。OpenCV不仅支持Vitis Vision库中加速内核的功能演示,而且还提供了一系列工具来帮助开发者验证和优化他们的算法。通过详细的安装指南,用户可以轻松地在他们的系统上配置OpenCV环境,从而确保Vitis Vision库的顺利运行和性能测试。此外,解决常见的安装错误,如共享库文件的查找和配置,进一步确保了开发环境的稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1841179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端 CSS 经典:边框转圈动画效果

前言:首先我们要知道 css 动画只对数值类的 CSS 属性起作用。要实现边框转圈动画效果,实际就是渐变背景的旋转。但是在以前,渐变背景是不支持动画的。现在我们可以利用浏览器新出的 Houdini API 来实现这个动画效果。Houdini API 特别强大&am…

leetcode119 杨辉三角②

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1] pub…

centos 7.8 安装sql server 2019

1.系统环境 centos 7.8 2.数据库安装文件准备 下载 SQL Server 2019 (15.x) Red Hat 存储库配置文件 sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo 采用yum源进行不安装下载,这时yum 会自动检测…

知觉感知:AI深层理解的关键

在人工智能(AI)的广阔领域中,一个核心议题始终萦绕在科学家和哲学家的心头:人工智能是否需要感知能力,以实现对意义的深层理解?这一议题不仅关乎技术的边界,更触及了人类心智的本质。从Stevan H…

[笔记] CCD相机测距相关的一些基础知识

1.35mm胶片相机等效焦距 https://zhuanlan.zhihu.com/p/419616729 拿到摄像头拍摄的数码照片后,我们会看到这样的信息: 这里显示出了两个焦距:一个是实际焦距:5mm,一个是等效焦距:25mm。 实际焦距很容易…

数据结构:4.1.1二叉搜素树及查找

静态查找:要找的集合的元素是不动的,主要是find操作,没有delete操作 动态查找:要查找的集合会经常发生插入删除的操作 静态查找的一个很好的方法就是二分查找 把数据直接放在树上 结点右子树的值>结点的值>结点左子树的…

Flutter-无限循环滚动标签

1. 序章 在现代移动应用开发中,滑动视图是常见的交互模式之一。特别是当你需要展示大量内容时,使用自动滚动的滑动视图可以显著提升用户体验。在这篇文章中,我们将讨论如何使用 Flutter 实现一个自动滚动的列表视图。 2. 效果 3. 实现思路 …

Java安全

Java安全 Java2Sec靶场搭建 靶场地址 https://github.com/bewhale/JavaSec 查看数据库配置文件,mysql,用户名密码根据自己数据库密码更改 使用小皮面板的mysql,新建一个数据名为javasec的数据库 运行javasec.sql文件 下载运行jar包即可 …

STM32单片机I2C通信详解

文章目录 1. I2C通信概述 2. 硬件电路 3. I2C时序基本单元 4. I2C时序 4.1 指定地址写 4.2 当前地址读 4.3 指定地址读 5. I2C外设 6. I2C框图 7. I2C基本结构 8. 主机发送 9. 主机接收 10. 软件和硬件波形对比 11. 代码示例 1. I2C通信概述 I2C(Inter-Integrat…

定制汽车霍尔传感器

磁电效应霍尔传感器、饱和霍尔传感器、非线性霍尔传感器 霍尔传感器原理 霍尔传感器的工作原理基于霍尔效应,即当一块通有电流的金属或半导体薄片垂直地放在磁场中时,薄片的两端会产生电位差。这种现象称为霍尔效应,两端具有的电位差值称为…

YoloV8改进策略:Block篇|即插即用|StarNet,重写星操作,使用Block改进YoloV8(全网首发)

摘要 本文主要集中在介绍和分析一种新兴的学习范式——星操作(Star Operation),这是一种通过元素级乘法融合不同子空间特征的方法,通过元素级乘法(类似于“星”形符号的乘法操作)将不同子空间的特征进行融…

(0撸)Nillion空投教程,现在开启激励测试网

Nillion 是一个去中心化的公共网络,通过启用去中心化信用评分、去中心化可信执行环境、私有 NFT、去中心化安全存储服务等用例来解锁 Web3 中重要的新实用程序 Nillion已经完成2000万美元融资、由Distributed Global领投、同时还有HashKey Capital、GSR等多家机构参…

opencascade AIS_InteractiveContext源码学习1 object display management 对象显示管理

AIS_InteractiveContext 前言 交互上下文(Interactive Context)允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是,对于已经被交互上下文识别的交互对象,必须使用上下文方法进行…

visual studio error MSB8008:

新项目编译的时候,可能由于编译器的版本不一致导致的问题。 你的电脑上有两个不同版本的VS,或者你的程序拷贝到别人的电脑上去运行,或者你是从别人那里拷贝来的项目,而你们俩用的VS版本不一样,就会在运行的时候出现这…

代码随想录算法训练营第四十三天|518. 零钱兑换 II ,LCR 103. 零钱兑换,377. 组合总和 Ⅳ

518. 零钱兑换 II - 力扣(LeetCode) class Solution {public int change(int amount, int[] coins) {// 创建dp数组,dp[i][j] 表示使用前i个硬币(下标为0的硬币是前1个)凑成总金额j的硬币组合数int[][] dp new int[coins.length …

AI在创造还是毁掉音乐

目录 1.概述 2.整体介绍 3.人机合作 3.1. AI作为助手 3.2. AI作为创意源泉 3.3. 交互式合作 3.4. AI独立创作与音乐人后期制作 3.5.试点和挑战 4.伦理道德 4.1.AI替代人类的可能性 4.2.伦理道德问题 4.3.平衡技术与创造力 4.4.小结 1.概述 近期音乐大模型的兴起&…

Python Textract库:文本提取

更多Python学习内容:ipengtao.com Textract是一个强大的Python库,用于从各种文件格式中提取文本。无论是PDF、Word文档、Excel电子表格、HTML页面还是图像,Textract都能有效地提取其中的文本内容。Textract通过集成多种开源工具和库&#xff…

Spark Core内核调度机制详解(第5天)

系列文章目录 如何构建DAG执行流程图 (掌握)如何划分Stage阶段 (掌握)Driver底层是如何运转 (掌握)确定需要构建多少分区(线程) (掌握) 文章目录 系列文章目录引言一、Spark内核调度(掌握)1.1、内容概述1.2、RDD的依赖1.3、DAG和Stage1.4、Spark Shuffl…

前端根据环境变量配置网页的title和favicon

前端根据环境变量配置网页的title和favicon 前言流程步骤一、设置environment文件二、在入口文件中配置三、删除index.html中的title和 icon link四、使用对应的打包命令进行部署 注意事项一、angular中,需要在angular.json添加favicon.ico额外的构建 前言 有些项目…

C++ | Leetcode C++题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int low 0, high numbers.size() - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return {low …