当前位置: 首页 > news >正文

ubuntu 22.04运行opencv4的c++程序遇到的问题

摘要:本文介绍一下在ubuntu系统中,运行一个最简单的opencv4程序都出问题的解决方法,并对其基本原理作简单阐述。解决问题的方法有很多,本文只提供其中一种。

opencv版本是4.2.0,ubuntu版本是20.04

查询opencv版本的指令是pkg-config --modversion opencv4,

pkg-config --modversion opencv4

注意命令最后的数字4要有,否则可能会出错。提示您Package opencv was not in the pkg-config --modversion opencv,错误信息回有4行,最后一行是No package 'opencv' found。

查询ubuntu版本的指令是

cat /proc/version

提示的信息有很多,有linux版本号,GCC,GNU以及ubuntu版本号,我们只关注ubuntu。提示信息是

20.04.1-Ubuntu SMP

在这样的编程环境下,编写C++代码,没想到会遇到很多的问题,就连编译一个最简单的程序都不可以,例如我们编译一下下面的一段代码。

源代码是官网的那个,注意,不同版本的程序要以官网为准。链接是Get Started - OpenCV

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
int main()
{std::string image_path = "lambo.png";Mat img = imread(image_path, IMREAD_COLOR);imshow("Display window", img);int k = waitKey(0); // Wait for a keystroke in the windowreturn 0;
}

如果您使用vscode编辑器直接debug,会提示您有一个错误,意思是找不到头文件。

“opencv2/core/core.hpp”: No such file or directory

我们的ubuntu下安装了opencv,即使您再次安装,会发现已经安装过了,不用更新了。

sudo apt install libopencv-dev

解决方法是在usr/include下创建一个快捷方式

sudo ln -s /usr/include/opencv4/opencv2 /usr/include

注意,运行这些命令前,您最好到图形化的界面下,到指定的目录看看,到底有没有这些文件夹。执行完命令后,您会发现,在usr/include目录下,创建了一个opencv2的快捷方式,其实这个文件夹就是在opencv4里面,但是系统会一直在include目录下来寻找,找不到,所以就提示了错误信息,现在我们做了一个快捷方式,那么系统就能找到了,就不再提示错误信息。按照这个分析,我们在图形化界面中,创建一个快捷方式也是可以用的。

完成以上步骤后,程序还是不能运行,如果您在vscode下面debug,仍然会提示有其他的错误信息。解决这些错误的方法有很多,花生没有一一验证,这里提供一个确保可以使用的方法:

解决思路:不用vscode来debug,而用CMakeLists.txt来解决,直接在命令行cmake即可

具体执行就是在c++源文件目录下新建一个txt文件,命名为CMakeLists.txt,然后在里面填写一些规定格式的信息,这个文件有很多讲究,包括第一行就必须有版本要求。set指令是我们需要的核心指令,hello.cpp是我们源代码的名字。

cmake_minimum_required(VERSION 3.16)
project( HELLO )
set(${OpenCV_INCLUDE_DIRS} "/usr/include/opencv4/opencv2")
set(${OpenCV_LIBS}  "/usr/lib/x86_64-linux-gnu/")
find_package(OpenCV 4.2.0 REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS}
)add_executable( hello ./hello.cpp )
target_link_libraries(hello ${OpenCV_LIBS})

在hello.cpp目录下打开terminal,然后使用cmake指令,后面跟了一个圆点,表示编译本目录。

cmake .

cmake之后要再make一下才能生成可执行文件。

make

要想执行这个hello可执行文件,需要指令

./hello

执行的效果就是将一张名为lambo.png的图片显示出来。完成了这一步,您就可以在代码中扩展更多的opencv功能了。

此外,帮助文档也尽量以opencv官网文档为准,因为opencv4和opencv2的一些指令有改变,如果从网上下载一些老版本的代码,可能在您的程序中无法使用,所以要以官方文档为准,这个文档是可以切换版本的。

OpenCV: Introduction

http://www.lryc.cn/news/170249.html

相关文章:

  • MDPI模板报错的问题---提示缺少sty文件
  • 【教程】微信小程序导入外部字体详细流程
  • 关于Kali部署OneForAll,不能运行问题
  • vue3中使用el-upload + tui-image-editor进行图片处理
  • 二叉树顺序结构及实现
  • python读取influxdb中数据
  • 【网络编程】UDP Socket编程
  • [GIT]版本控制工具
  • Linux文件管理命令
  • Netty面试题(三)
  • risc-v dv源代码分析
  • C语言基础语法复习07-c语言关键字的解释
  • 阿里巴巴全店商品采集教程,阿里巴巴店铺所有商品接口(详解阿里巴巴店铺所有商品数据采集步骤方法和代码示例)
  • Android 白天黑夜模式设置
  • FFMpeg zoompan 镜头聚焦和移动走位
  • 利用hutool工具类实现验证码功能
  • 前端面试题: 请解释什么是函数的作用域?
  • 华为云云服务器云耀L实例评测 | 华为云云服务器实例新品全面解析
  • Nginx配置SSL证书
  • 一,安卓aosp源码编译环境搭建
  • video 视频编解码一些debug方法
  • 中秋国庆假期——模板推荐
  • 【配代码演示】Cookie和Session的区别
  • 【Linux初阶】信号入门2 | 信号阻塞、捕捉、保存
  • 【已解决】:该该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)“按钮获取它的所有权。否则,请按“取消(C)“按钮以防损坏。
  • 系统架构常用的工具
  • 腾讯云2核4G服务器5M带宽 218元一年 优惠价格明细表
  • [C++ 网络协议] 多播与广播
  • IOS17正式版今日发布
  • 2560. 打家劫舍 IV