• 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

    1. #include
    2. #include
    3. using namespace cv;
    4. int main()
    5. {
    6. std::string image_path = "lambo.png";
    7. Mat img = imread(image_path, IMREAD_COLOR);
    8. imshow("Display window", img);
    9. int k = waitKey(0); // Wait for a keystroke in the window
    10. return 0;
    11. }

    如果您使用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是我们源代码的名字。

    1. cmake_minimum_required(VERSION 3.16)
    2. project( HELLO )
    3. set(${OpenCV_INCLUDE_DIRS} "/usr/include/opencv4/opencv2")
    4. set(${OpenCV_LIBS} "/usr/lib/x86_64-linux-gnu/")
    5. find_package(OpenCV 4.2.0 REQUIRED)
    6. include_directories(
    7. ${OpenCV_INCLUDE_DIRS}
    8. )
    9. add_executable( hello ./hello.cpp )
    10. target_link_libraries(hello ${OpenCV_LIBS})

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

    cmake .

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

    make

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

    ./hello

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

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

    OpenCV: Introduction

  • 相关阅读:
    【计算机网络】P1 计算机网络概述
    EMC测试项目
    从校园智能门锁预见万物互联的未来
    Nginx+keepalived实现七层的负载均衡
    Codeforces Round #804 (Div. 2)(A~D)
    关于JVM的参数类型
    Java面试题精选21到31
    06- 诊断事件DemEventParameter的配置
    [附源码]计算机毕业设计springboot校园疫情防范管理系统
    MyBatis 批量插入foreach性能问题
  • 原文地址:https://blog.csdn.net/youngwah292/article/details/132892828