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.hqwc.cn/news/109993.html

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

相关文章

如何让两台手机相互远程控制?

你的两台手机是什么系统的&#xff1f;如果你的两台手机都是安卓系统&#xff0c;而且都是安卓7.0及以上版本的系统&#xff0c;那么恭喜你&#xff0c;这两台手机可以相互远程控制&#xff01; 你可以利用两个软件实现将两台手机相互远程控制的想法。为了避免混淆&#xff0c…

XL-LightHouse 与 Flink 和 ClickHouse 流式大数据统计系统

一个Flink任务只能并行处理一个或少数几个数据流&#xff0c;而XL-LightHouse一个任务可以并行处理数万个、几十万个数据流&#xff1b; 一个Flink任务只能实现一个或少数几个数据指标&#xff0c;而XL-LightHouse单个任务就能支撑大批量、数以万计的数据指标。 1、XL-LightHo…

c语言每日一练(15)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;上学期间将看学业情况更新。 五道选择题&#xff1a; 1、程序运行的结果…

Linux四种I/O模型

一.四种模型 阻塞式IO&#xff0c;非阻塞式IO&#xff0c;信号驱动IO&#xff0c;IO多路复用 二.阻塞式IO 特点&#xff1a;最简单&#xff0c;最常用&#xff0c;效率低 阻塞I/O 模式是最普遍使用的I/O 模式 系统默认状态&#xff0c;套接字建立后所处于的模式就是阻塞I/O 模式…

IDEA连接数据库-MySql为例

1.找到Database 说明&#xff1a;找到Data Source下面的MySql 2.点击mysql 3.填写相关配置 说明&#xff1a;填写连接哪台服务器(这里是本机)&#xff0c;账号&#xff0c;密码&#xff0c;然后点击Test Connection 4.显示 说明&#xff1a;表示一共有7个&#xff0c;但是展…

FDM3D打印系列——Blue Mary

大家好&#xff0c;我是阿赵。   这次打印一个拳皇里面的Blue Mary。   打印这个模型的原因&#xff0c;是看到有网友说这个模型用FDM打印不出来&#xff0c;有些人评论说要光固化才行。所以我也想试试。结果是成功的。 一、打印过程 这个模型是分为了5个部分&#xff0c…

百度千帆大模型文心一言api调用

注册百度智能云账号并申请文心千帆大模型资格 https://login.bce.baidu.com/ https://cloud.baidu.com/product/wenxinworkshop 创建应用用于获取access_token 创建应用成功后,可以获取到API Key和Secret Key 获取access_token curl https://aip.baidubce.com/oauth/2.0/to…

基于安卓Java试题库在线考试系统uniapp 微信小程序

本文首先分析了题库app应用程序的需求&#xff0c;从系统开发环境、系统目标、设计流程、功能设计等几个方面对系统进行了系统设计。开发出本题库app&#xff0c;主要实现了学生、教师、测试卷、试题、考试等。总体设计主要包括系统功能设计、该系统里充分综合应用Mysql数据库、…

Ubuntu编译运行socket.io

本篇文章记录一下自己在ubuntu上编译运行socket.io的过程&#xff0c;客户端选用的是socket.io的c的库&#xff0c;编译起来倒不难&#xff0c;但是说到运行的话&#xff0c;对我来说确实是花了点功夫。毕竟程序要能运行起来才能更方便地去熟悉代码&#xff0c;因此今天我就记录…

【JavaScript】HTML文件插入JavaScript函数

介绍 在HTML文件中插入JavaScript函数的方法如下&#xff1a; 1、在HTML文件中使用<script>标签来定义JavaScript函数&#xff0c;例如&#xff1a; <script> function myFunction() {// 在这里编写JavaScript函数代码 } </script>2、在HTML文件中调用Jav…

Shell 正则表达式及综合案例及文本处理工具

目录 一、常规匹配 二、常用特殊字符 三、匹配手机号 四、案例之归档文件 五、案例之定时归档文件 六、Shell文本处理工具 1. cut工具 2. awk工具 一、常规匹配 一串不包含特殊字符的正则表达式匹配它自己 例子&#xff0c;比如说想要查看密码包含root字符串的&#x…

前端综合练手小项目

导读 本篇文章主要以小项目的方式展开&#xff0c;其中给出的代码中均包含详细地注释&#xff0c;大家可以参照理解。下面4个小项目中均包含有 HTML、CSS、JavaScript 等相关知识&#xff0c;可以拿来练手&#xff0c;系统提升一下自己的前端开发能力。 废话少说&#xff0c;…