Linux环境下使用opencv的dnn模块调用yolov4遇到的坑(纯CPU)

1. 无法安装opencv依赖包libjasper-dev

无法定位软件包libjasper-dev

2. 编译opencv时报错缺少boostdesc_bgm.i文件

把这个里面的所有文件添加到opencv_contrib/modules/xfeatures2d/src/中即可

另外,如果报错没有features2d/XXX.hpp,可以直接将/opencv/modules/features这个文件夹拷贝到opencv_contrib/modules/xfeatures2d/test文件夹下,但是可能会有一些问题,见3

3. 编译opencv时报错没有common.h

features2d_converters.cpp:2:10: fatal error: common.h: 没有那个文件或目录

4. 测试dnn模块时报错undefined reference to `cv::dnn::dnn4_v20191202::Net::~Net()‘

https://blog.csdn.net/weixin_50497501/article/details/131622923

5. 调用yolov4-tiny返回结果没有检测框

可能是makefile中指定的opencv库文件和头文件版本不一致,具体看这篇文章的第三条

总结以及备忘录

1. 关于opencv的编译选项

cmake -DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/usr/local/opencv455 \-DOPENCV_GENERATE_PKGCONFIG=ON \-DOPENCV_EXTRA_MODULES_PATH=/home/opencv-install/opencv4.5.5/opencv_contrib-4.5.5/modules ..
  1. OpenCV4以上版本默认不使用pkg-config,但是可以通过相应的编译选项开启该功能:
    -DOPENCV_GENERATE_PKGCONFIG=ON
  2. 可能是概率性事件,-DOPENCV_EXTRA_MODULES_PATH写完整路径的话,boostdesc_bgm.i这些文件在cmake时下载成功了
  3. 最后的. .两个点别忘了

2. 关于管理多版本opencv

前提:编译opencv时添加-DOPENCV_GENERATE_PKGCONFIG=ON选项,或者自行配置opencv.pc(要创建文件夹/opencv_install_path/lib/pkgconfig,并将opencv.pc放在该文件夹下)

opencv.pc示例

# Package Information for pkg-configprefix=/usr/local/opencv455(改)
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include/opencv4Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.5.5(改)
Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_wechat_qrcode -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}

之后,步骤如下:

# 0. 可以先对opencv.pc文件改名,之后使用pkg-config查找opencv时,用的就是pc文件名(可以尾缀版本号)
sudo mv -i /opencv_install_path/lib/pkgconfig/opencv.pc /opencv_install_path/lib/pkgconfig/opencv455.pc# 1. 将opencv的pc配置文件添加到系统全局配置文件中
sudo vi /etc/bash.bashrc# 2. 向文件中添加如下内容
export PKG_CONFIG_PATH_OPENCV455=$PKG_CONFIG_PATH_OPENCV455:/opencv_install_path/lib/pkgconfig
# 我个人而言,添加内容如下
export PKG_CONFIG_PATH_OPENCV455=$PKG_CONFIG_PATH_OPENCV455:/usr/local/opencv455/lib/pkgconfig
export PKG_CONFIG_PATH_OPENCV440=$PKG_CONFIG_PATH_OPENCV440:/usr/local/opencv440/lib/pkgconfig# 3. 重新加载bash配置 或者重启shell
source /etc/bash.bashrc# 4. 使用pkg-config查找opencv
pkg-config --modversion opencv455
> 4.5.5
pkg-config --modversion opencv440
> 4.4.0

3. opencv Makefile的通用模板

CXX = aarch64-linux-gnu-g++INCLUDE = $(shell pkg-config --cflags opencv455)  # 获得opencv相关头文件路径
LIBS = $(shell pkg-config --libs opencv455) # 获得opencv扩展库。SOURCES = test.cpp 
TARGET = test$(TARGET):$(SOURCES)@$(CXX) -std=c++11 -O1 -o $(TARGET) $(SOURCES) $(INCLUDE) $(LIBS)clean:rm -rf $(TARGET) *.o

$(shell pkg-config --cflags opencv455)中的opencvx,和opencv安装路径下的lib/pkgconfig/opencvx.pc文件名是对应的

4. 调用yolo的代码

可以看这篇博客:4种YOLO目标检测的C++和Python两种版本实现

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

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

相关文章

MySQL 8 修改root密码ERROR 1064 (42000): You have an error in your SQL syntax;

root先利用原密码登陆 mysql -u root -p Enter password: ******* Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.26 MySQL Community Server - GPLCopyright (c) 2000, 2021, Oracle and/or its affiliate…

Apache(httpd) 搭建笔记

Apache 搭建笔记 安装Apache HTTP服务器:启动Apache服务并设置开机自启 配置SSL证书配置Apache的SSL虚拟主机:重启Apache服务以使更改生效: 多站点配置第一个虚拟主机配置第二个虚拟主机创建每个站点的根目录: 强制跳转http>&g…

【 vue使用请求loading:组件形式】

vue使用请求loading:组件形式(不推荐:太麻烦了,每个需要用到的页面都需要引用一次组件) 这是我项目中想使用loading之后踩的第一个坑,后面优化用了vant自带的提示框,比较简单, 可移步这篇文章→→→ vuevant使用请求l…

ROS+APM无人机无法起飞

APMROS解锁后不起飞 : 参考链接 PX4固件官网提供的代码不支持APM固件使用,需要进行相关修改后使用 解决办法 使用如下代码发布无人机位置控制时,必须先执行无人机起飞动作时候,这条命令才会生效。 ros::Publisher local_pos_pub nh.adve…

ylb-接口8手机号注册

总览: 在web模块下的service包,补充短信接口(SmsService):检查用户发送的验证码是否正确 package com.bjpowernode.front.service;public interface SmsService {/*** param phone 手机号* return true:发…

Java 的集合

一、Collection 1、ArrayList 底层采用数组实现,操作大多基于对数组的操作。 在添加和删除时需要做 System.arraycopy(native层方法) 拷贝工作。 添加元素时可能会扩容,这要大量的拷贝工作,删除元素时,会把后面的元素向前拷贝。…

Redis+IDEA极速了解和实现单机锁和分布式锁

单机下: 只适用于单机环境下(单个JVM),多个客户端访问同一个服务器 1.synchronized package com.cloud.SR.controller;import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.cor…

wps插入图片显示不全、混乱

问题如下: 原因: 格式混乱 解决办法: 1、统一格式,使用格式刷统一文档的格式 2、Ctrl A 全选,重新选择行距 3、重新粘贴图片(选择嵌入型)

【Hello mysql】 mysql的内置函数

Mysql专栏:Mysql 本篇博客简介:介绍mysql的基内置函数 mysql的内置函数 日期函数获取年月日获取时分秒获取时间戳在日期的基础上加上日期在日期的基础上减去日期计算两个日期之差创建一张表 记录生日创建一个留言表 字符串函数获取emp表的ename列的字符集…

Dubbo分布式服务框架,springboot+dubbo+zookeeper

一Dubbo的简易介绍 1.Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需…

idea编译时遇到的bug

1、对象重复定义 问题描述: D:\workspace\spark\src\main\Scala\WordCount.scala:3:8 WordCount is already defined as object WordCount object WordCount { 解决参考博客:Error:(21, 8) FlumePushWordCount is already defined as object FlumePush…

水调歌头·明月几时有

相关标签 宋词、苏轼、月亮、中秋、饮酒、思念 标题 水调歌头明月几时有 作者简介 苏轼(1037-1101),字子瞻,号东坡居士,眉州眉山(今属四川)人,北宋时期杰出的文学家、政治家、艺…

PDF转成PNG,之后PNG转成PDF

PDF2IMG 需要安装python的img2pdf和pdf2img的包,还需要安装https://github.com/oschwartz10612/poppler-windows/releases/,并且解压之后把路径lib/bin添加到环境变量 import multiprocessing import sys from datetime import time import time from p…

rust abc(5): 常量

文章目录 1. 目的2. 基本用法2.1 说明2.2 运行结果 3. 不推荐或不正确用法3.1 不推荐用小写字母作为常量名字3.2 常量名称中含有小写字母就会报warning3.3 定义常量时,不指定数据类型会编译报错 4. const 和 immutable 的区别4.1 const 可以在函数外声明&#xff0c…

基于深度学习的高精度安全帽及背心检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度安全帽及背心检测识别系统可用于日常生活中或野外来检测与定位安全帽及背心目标,利用深度学习算法可实现图片、视频、摄像头等方式的安全帽及背心目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系…

Go和Java实现策略模式

Go和Java实现策略模式 模拟多种营销类型优惠券,折扣⾦额计算策略场景。 1、策略模式 在策略模式中一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略,并将每个算法封装在独立的…

iOS/macOS - 逐行写入文件 (NSFileHandle)

文章目录 - (void)saveDataByLine{NSString *filePath = @"/Users/xx/Library/Containers/com.ds.TMXExport/Data/Library/Caches/a.txt";NSLog(@"filePath : %@", filePath);if (!

代码随想录算法训练营第五十天|123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

leetcode 123 买卖股票的最佳时机 III 题目链接 123. 买卖股票的最佳时机 III - 力扣(LeetCode) 做题过程 这里有两次交易机会。因此有5种状态。0没有操作,1第一次买入,2第一次卖出,3第二次买入,4第二次…

WebDAV之π-Disk派盘 + Solid Explorer

Solid Explorer 支持WebDAV方式连接π-Disk派盘。 Solid Explorer 是一款非常优秀的 Android 文件管理器,Material Design 设计风格,双栏布局,可拖拽操作、支持 ROOT 权限、多媒体浏览器、压缩包支持,Chromecast 流支持等众多功…

微信为什么使用 SQLite 保存聊天记录?

概要 SQLite 是一个被大家低估的数据库,但有些人认为它是一个不适合生产环境使用的玩具数据库。事实上,SQLite 是一个非常可靠的数据库,它可以处理 TB 级的数据,但它没有网络层。接下来,本文将与大家共同探讨 SQLite 在…