ubuntu18.04下opencv3.4.1的CMake编译简单显示图片程序

前言

记录一下本次在ubuntu18.04下opencv3.4.1的编写一个简单的显示图片程序,并使用CMake和make编译的心得。

一、前置准备

  1. 一个ubuntu18.04系统
  2. opencv3.4.1
  3. CMake与make

二、Cpp源码编写

opencv部分

安装好opencv3.4.1后,可以利用Cpp(C++)语言进行使用,只需要这样

#include <opencv2/opencv.hpp>  
using namespace cv;

即可以在主函数里使用cv包的函数。本次使用的cv函数记录如下:

  1. 读取图片

     image = imread( argv[1], 1 );
    

    返回值image是Mat类型的,需要两个参数:argv[1]为打开路径,第二个参数为打开方式,填1即可;

  2. 打开一个用于展示图片的窗口

     namedWindow("Display Image", WINDOW_AUTOSIZE );
    

    需要两个参数:第一个为窗口名,第二个参数为窗口打开方式,填WINDOW_AUTOSIZE即可;

  3. 展示图片

     imshow("Display Image", image);
    

    需要两个参数:第一个为窗口名,image为要展示的图片;

基本上完成这些操作就能打开并展示图片了。

main()参数部分

main函数可以添加两个参数,

int main(int argc, char** argv )

第一个参数是指令行参数的个数(包括输入的可执行文件名),第二个参数就是你要传给程序的参数字符串(是一个字符串组,多个,指令行中参数之间以空格作为分隔符,同样包括输入的可执行文件名),主函数中使用时 argv[1] 即为外部指定的路径。

当程序编译成可执行文件(比如go)后,只需外部指定,像这样

./go 参数1 参数2  

即可给参数赋值。

三、Cmake使用

  1. 为什么要用Cmake
    简单来说,其实编译需要make,而make需要makefile文件引导,而makefile的编写太麻烦,不如让Cmake去写。写好后我们只需要在有makefile的文件夹下执行make命令即可。跟具体的参考这里https://blog.csdn.net/qq_27825451/article/details/103392719

  2. Cmake的使用前
    使用Cmake前,当前目录下一般有3个文件,源程序(.c或.cpp),CMakeLists.txt(引导Cmake编译),build目录(产生的文件,其中就有makefile),其中CMakeLists.txt里确定了最后make产生的可执行文件在哪里,也确定了项目的目录关系(头文件关系),这里简单说明CMakeLists.txt的写法(其中注释不建议复制,因为包含中文,可能影响编译):

     cmake_minimum_required(VERSION 2.8)		#这句限定cmake最小版本,如这里是2.8。此句非必须,只是不写会出警告。  
     project( show )		#项目名,单文件时非必须  
     find_package( OpenCV REQUIRED )		#找到头文件需要的已经在系统里已经安装好的包(系统自带的包不需要)  
     add_executable( show fun.cpp show.cpp )  	#指定编译后可执行文件的地址(可用以cmake为基准的相对路径),与需要编译的文件,其中自定义头文件对应的源文件也需要编译  
     target_link_libraries( DisplayImage ${OpenCV_LIBS} )		#连接可执行文件与已经安装好的包,第一个参数是可执行文件,第二个是安装好的包的路径,这里使用的是系统变量  
     set(SOURCES  src/Hello.cpp src/main.cpp)		#设置变量,之后CMakeLists.txt中可以使用${SOURCES}引用  
    

    这里补充几个常用已经预定义的变量

     PROJECT_SOURCE_DIR	#CMake源码地址,即cmake命令后指定的地址
     PROJECT_BINARY_DIR	#运行cmake命令的目录,通常是PROJECT_SOURCE_DIR下的build目录
     CMAKE_CURRENT_LIST_DIR	#当前文件夹路径
    

    cmake具体用起来就是一句命令

     cmake 参数1
    

    其中参数1是要cmake的CMakeLists.txt位置(一般源码也在一起),这句命令会在运行的目录下生成make所需的文件,之后执行

     make
    

    即可,完成编译,编译好的可执行文件默认就在运行的目录下,可以在CMakeLists.txt的add_executable指定更改。

  3. Cmake的具体使用
    如果源码目录下已经写好CMakeLists.txt,用终端进入(cd)源码目录,之后一次执行以下命令

     mkdir build  
     cd build  
     cmake ..
     make
    

    即会在build目录下生成一些make所需文件,最后一句make会在此生成最终的可执行文件。

四、一点意外

在正常编译后,运行应用程序,我的虚拟机总会报出类似这样的警告,但不影响程序的运行:

Gtk-Message: 16:10:49.684: Failed to load module "canberra-gtk-module"

经过查询资料,在终端输入一下代码即可解决:

sudo apt-get install libcanberra-gtk*

最后搜索发现 libcanberra-gtk-moduel 是使用 libcanberra-gtk 来触发输入反馈事件声音的 Gtk+ 模块,所以仅仅是警告,不影响运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值