在linux环境下编译运行OpenCV程序的两种方法

这篇具有很好参考价值的文章主要介绍了在linux环境下编译运行OpenCV程序的两种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原来以为在Ubuntu下安装好了OpenCV之后,自己写个简单的程序应该很容易吧,但是呢,就是为了编译一个简单的显示图片的程序我都快被弄崩溃了。

  在谷歌和上StackOverFlow查看相关问题解答之后,我下面就介绍Command Line和CMake两种方式。

  首先我先粘上我测试的代码吧,文件名为Test.c

#include <highgui.h>

int main(int argc,char ** argv) {

    IplImage* img = cvLoadImage(argv[1],CV_LOAD_IMAGE_COLOR);
    cvNamedWindow("Image_show",CV_WINDOW_AUTOSIZE);
    cvShowImage("Image_show",img);
    cvWaitKey(0);
    cvReleaseImage(&img);
    cvDestroyWindow("Image_show");
    return 0;
}

第一种方法:Command Line(使用命令行参数的方法)

gcc Test.c -o Test `pkg-config --cflags --libs opencv`
./Test baboon.jpg

在这里我稍微解释下这条命令的作用吧。

  在上面的编译命令中我们其实用到了一个工具“pkg-config”,它主要有以下几个功能:

  1. 检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
  2. 获得编译预处理参数,如宏定义,头文件的位置。
  3. 获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
  4. 自动加入所依赖的其它库的设置

  所有有了这个工具之后我们的编译就很方便了(不过在此之前你要确保你安装的OpenCV的安装链接库文件的目录下有一个pkgconfig文件夹,在该文件夹里面有个opencv.pc的文件,其实这就是pkg-config下OpenCV的配置文件)。

  使用pkg-config时,选项--cflags 它是用来指定程序在编译时所需要头文件所在的目录,选项 --libs则是指定程序在链接时所需要的动态链接库的目录。例如我下面这张图就显示了我电脑上OpenCV的相关目录。

linux opencv,ubuntu,linux,运维

第二种方法:使用OpenCV推荐的CMake工具

  这个方法,我郁闷了很久,试了各种办法,最终还是编译运行成功啦。一把心酸泪啊。

   下面我就一步步介绍下步骤吧:

  step1:新建一个目录用于存放我们的代码和程序中要处理的相关图片

linux opencv,ubuntu,linux,运维

 step2:添加cmake工具编译时所需的文件CMakeLists.txt

linux opencv,ubuntu,linux,运维

 CMakeLists.txt文件中的具体内容如下(注:这个文件你可以到你的OpenCV源代码解压出来的文件夹下的/samples/c/example_cmake/文件夹下拷过来,然后再做修改)。

  下面我就简要的介绍下这里面内容的大概意思吧

PROJECT(OpenCV_Example)           //这是建立一个工程项目(类似于我们VS中建立C++项目一样),括号里面时工程名,工程名我们可以任意给,最后程序编译出来的可执行文件就是这个名字
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)    //这是对CMake工具最低版本要求,这里我们要检查下我们的CMake工具的版本信息,我们可以使用命令“cmake --version”查看
if(COMMAND cmake_policy)            
      cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
 
FIND_PACKAGE( OpenCV REQUIRED )   //这是cmake用来查找opencv包用的,不用改

# Declare the target (an executable)
ADD_EXECUTABLE(OpenCV_Example  Image_show.c)      //这里括号里面的两个参数分别是工程项目名和我们要编译文件名的意思,记住中间一空格键隔开

TARGET_LINK_LIBRARIES(OpenCV_Example ${OpenCV_LIBS})  //这是我们链接到OpenCV库的环节,我们只要更改前面第一个参数位我们的工程项目名即可

#MESSAGE(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}")     //好了,就修改这么点东西,保存,关闭。

 然后我们就将终端的工作目录切换到我们建立工程文件的这个目录

  (注意,千万要注意:你这时一定要查看你安装OpenCV时建立的那个编译文件,有没有带锁的标志(即你编译OpenCV是用root权限编译的),就这点就把我坑惨了,例如的我电脑上显示的就是这样的

linux opencv,ubuntu,linux,运维

 看到上面图片中的build文件夹没,那就是我编译OpenCV源代码时建立的文件夹。)

  所以,如果你是以root的权限编译的OpenCV此时你就要以切换到root用户,再切换到当前的工作目录。如果不是用root权限编译的OpenCV编译的话,你就直接切换目录就OK了。

  我的电脑是要切换到root状态的

linux opencv,ubuntu,linux,运维

  Step3:让后我们输入命令"cmake ."对当前的工程进行编译。啊哦,这时你就会发现你编译时出现了一个Bug

linux opencv,ubuntu,linux,运维

这个警告的大概意思就是:Cmake找不到OpenCV的链接库文件,你需要手动地设置OpenCV_DIR来指向包含库文件的路径。

  好吧,这是最蛋疼的地方,就这个问题我google和上StackOverFlow都没有找到答案,只能自己尝试了,不过还是找到网友给的一些提示。

  其实通过它给我们的提示我们就是要设置好这个路径。接下来我们通过camke的qt界面进行设置吧。

  

  Step4:设置OpenCV_DIR

  (1)先安装cmake的qt界面 "sudo apt-get install cmake-gui"

  (2)打开cmake-gui界面

linux opencv,ubuntu,linux,运维

  (3)我们这是就在Where is the source code 和 where to build binaries 的选项里选择我们的目录刚才建立包含我们程序的文件路径吧。

linux opencv,ubuntu,linux,运维

(4)我们选择cmake界面中的“Add Entry”选项,按照我下面图中的方式输入信息吧,其中alue值就是我OpenCV安装的那个目录(回想下我上面说的)。

linux opencv,ubuntu,linux,运维

这样我们就点击ok吧,得到下面的图了

linux opencv,ubuntu,linux,运维

到此OpenCV_DIR就配置完成了,单击下面的Configure和Generate,如果没报错则一切搞定啦。我们可以愉快的回到终端编译我们的程序啦。

  (5)编译的方式如图所示

   

linux opencv,ubuntu,linux,运维

  看到了吗,绿色OpenCV_Example就是我们刚生成的可执行文件,到此大功告成啊。

  

   Step5:运行测试吧

  

linux opencv,ubuntu,linux,运维文章来源地址https://www.toymoban.com/news/detail-563803.html

到了这里,关于在linux环境下编译运行OpenCV程序的两种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux环境下编译并使用java_opencv

    java_opencv windows环境下很好部署使用,官网直接有一键安装版,所以这里就不提了,主要说说这个linux环境下,哎,一堆坑,踩了好几天. 安装编译环境 下载源码 版本自己可以去官网选择,我这里是觉得没必要整那么高的版本 编译安装 这一步巨慢,不加 -j8巨巨慢,自己的机器有几核就-j几

    2024年02月13日
    浏览(36)
  • vscode运行c++结果输出在windows终端的两种方法

    打开.vscode中launch.json文件 修改下面三个配置 \\\"program\\\":\\\"C:\\\\Windows\\\\System32\\\\cmd.exe\\\", \\\"args\\\": [\\\"/C\\\",\\\"${fileDirname}\\\\${fileBasenameNoExtension}.exe\\\",\\\"\\\",\\\"pause\\\"], \\\"externalConsole\\\": true, 以非调试模式运行,ctrl+F5 打开.vscode中launch.json文件 修改\\\"externalConsole\\\": true, 在main函数中最后加入getchar()函数 注:方法2如

    2024年02月19日
    浏览(39)
  • Linux下安装CMake的两种方法

    方法一:使用包管理器安装CMake 在Linux系统中,可以使用包管理器来安装CMake。不同的Linux发行版可能使用不同的包管理器,下面以常见的Ubuntu系统为例: 打开终端,输入以下命令更新包管理器的软件源信息: 安装CMake: 输入管理员密码确认安装。包管理器将自动下载并安装

    2024年02月04日
    浏览(44)
  • Linux中重启Redis的两种方法

    在Redis中我们通常会修改redis.conf来配置我们的Redis,但是配置完后需要重启Redis才能生效,下面我将分享我学习到的两种重启方式, 推荐使用第二种 1、kill -9 Redis进程号 上述查看Redis的进程号的命令,运行结果如下: 2、通过客户端告诉Redis服务器重新启动(安全) 上述的 192

    2024年01月25日
    浏览(66)
  • Linux判断操作系统的两种方法

    01 :cat /etc/redhat-release 适用于:CentOS,RedHat 如图,出现CentOS ,则为CentOS系统。    02:cat /etc/issue 显示如下图,则为CentOS; 如果出现Ubuntu字样,则是Ubuntu。 ​​​​​​​  

    2024年02月05日
    浏览(36)
  • 微信小程序阻止小程序返回的两种方法

    本次项目为uniapp开发,原生小程序也可以参考这两个方法。 wx.enableAlertBeforeUnload onLoad中声明 优点:简单方便 缺点:无法自定义样式、按钮文字及样式 page-container 这是一个类似弹框的组件,具体参数可以去官网查看。 返回操作包括:顶部导航、右滑手势、安卓物理返回键和

    2024年02月16日
    浏览(51)
  • 修改 Linux 系统中 22 端口的两种方法

    在进行系统运维时,有时候需要修改 Linux 系统上的某个特定端口的配置。本文将介绍两种常见的方法来修改 Linux 系统中的 22 端口(SSH 默认端口)的配置。 方法一:修改 SSH 配置文件 SSH(Secure Shell)是一种常用的远程登录协议,它通常使用 22 端口进行连接。我们可以通过修

    2024年02月04日
    浏览(38)
  • 微信小程序播放音乐的方法中的两种方法

    微信小程序播放音乐的方法有很多种,这里总结一下其中两种的优缺点,主要是最近用到了 这个是最简单的 其他的就不多说了,说一下现在微信文档里没有的action属性 action属性可以选择组件对应的动作,比如播放或暂停,具体如下 或者 不过这样的话要考虑渲染延时问题,

    2024年02月06日
    浏览(51)
  • 在较新版pycharm中使用conda虚拟环境的两种方法-保姆级教程

    首先创建new-project 之后等待配置索引等文件即可。 在终端terminal中直接使用conda activate xxx,但是失效。 解决方法: file-settings-Tools-Terminal 之后一定要记得 重启! 然后就好了: 之后conda activate xxx(你的虚拟环境),在里面运行你的python文件即可(python xxx.py --xxx) 如果是这样创建的

    2024年02月09日
    浏览(44)
  • IDEA 打包MapReduce程序到集群运行的两种方式以及XShell和Xftp过期的解决

    【MapReduce打包成jar上传到集群运行】http://t.csdn.cn/2gK1d 【Xshell7/Xftp7 解决强制更新问题】http://t.csdn.cn/rxiBG 这里的打包是打包整个项目,后期等学会怎么打包单个指定的mapreduce程序再来更新博客。 注意: 这个时候已经在 target 目录下打包好了一个jar包: 我们可以直接使用这个

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包