Ubuntu18.04下使用cmake编译一个OpenCV程序(编写CMakeLists.txt文件)

2023-05-16

导航

  • 1.安装OpenCV
    • 1.1首先安装OpenCV。
    • 1.2定位OpenCV
  • 2.创建一个项目
  • 3.编写一个基础OpenCV程序
  • 4.编写CMakeLists.txt文件

为了记录以及防止遗忘,备份一个大致能满足运行的CMakeLists.txt文件编写。由于是使用嵌入式运行,当运行在树莓派或者Jetson时对资源的使用是比较敏感的,而只用命令行就能解决问题是一件很酷的事。

1.安装OpenCV

1.1首先安装OpenCV。

自己根据需要选择自己所需要的版本。推荐一篇博客:
ubuntu安装opencv的正确方法.
OpenCV的版本号由主版本号,次版本号和补丁构成。如OpenCV 3.4.5。

1.2定位OpenCV

可能由于各种原因,我们的系统上会安装了多版本,多位置的OpenCV。一般情况下不会影响使用,但当你需要指定特定的版本时,可以用下面这个命令定位存在在系统上的所有OpenCVConfig.cmake文件。

locate OpenCVConfig.cmake

但就算没有显示路径,好像也不能判断是否安装失败,学艺不精。
比如我是安装了opencv就没有显示,如图。
在这里插入图片描述

可以用如下命令确认是否安装成功

pkg-config opencv --modversion 

1.区分大小写
2.根据后缀名.cmake就知道这是Cmake的配置文件
3.这个路径一般不会用到,只会在指定特定openCV版本时中用到。在CMakeLists.txt里用下面这个命令。

find_package(OpenCV REQUIRED)
//自动指定,注意!区分大小写

2.创建一个项目

我们在项目文件夹下创建src,include,lib,build四个文件夹和CMakeLists.txt。注意,区分大小写

mkdir demo	//创建项目文件夹
cd demo && mkdir src include lib build && touch CMakeLists.txt	
//进入demo文件夹后创建4个文件夹和CMakeLists.txt文件

在这里插入图片描述

其实本次用到的只是一个简单的程序,可以不用这些细分文件夹。
1.src文件夹放.c/.cpp文件;
2.include文件夹放.h文件;
3.lib文件夹放库文件.a/.so;
4.build文件夹用于放cmake运行产生的多个文件,这个文件名可以是其他,如my_build。因为还没有cmake CMakeLists.txt,所以build文件夹下还没有任何文件。

3.编写一个基础OpenCV程序

cd src && gedit zzing.cpp
//进入src文件夹后创建并编辑zzing.cpp

写入如下代码

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

int main() {
    Mat img = imread("../lena.jpeg");
    if (img.empty()) {
	cout <<"error,unable to open picture"<< endl;
	return -1;
    }    
	imshow("img", img);
	waitKey(0);    
    return 0;
}

保存后退出
代码大致的作用是把项目根目录下的lena.jpeg在一个窗口中展示,应该是OpenCV最基础的程序。可以自己找一张照片放在自己喜欢的路径,代码 imread("…/lena.jpeg")的" "内填入对应路径。
加入图片和zzing.cpp后目录树如图:
在这里插入图片描述

原本还想写一个在Jetson NX读取相机的程序,结果在咸鱼上买的树莓派csi相机读取不出来,也不知道是不兼容还是被坑了,郁闷。有知道怎么解决的朋友吗?

4.编写CMakeLists.txt文件

cd ../ && gedit CMakeLists.txt
// 返回上一级后编辑CMakeLists.txt

打开文件后写入如下命令

cmake_minimum_required(VERSION 2.8)	#声明cmake需要的最低版本
project(Demo)	#声明cmake项目的名称

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

find_package(OpenCV REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})	#添加OpenCV头文件
add_executable(${PROJECT_NAME} src/zzing.cpp)	#生成可执行文件,这里我把可执行文件名称定义成项目名称
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})	#链接OpenCV库文件到cmake项目上

cmake_minimum_required() 需要的最低cmake版本
project() 生成的项目名称

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
这两个命令指定编译类型为C++
如果是CMAKE_C_STANDARD则为C

find_package(OpenCV REQUIRED)
这个命令会在系统内寻找OpenCV的路径,找前文提到的OpenCVConfig.cmake,注意大小写。

${OpenCV_INCLUDE_DIRS}和 ${OpenCV_LIBS}分别是OpenCV的头文件和库文件包含路径,来自find_package(OpenCV REQUIRED)。
这里推荐一篇文章
CMakeLists.txt 语法介绍与实例演练

完成CMakeLists.txt编写后进行cmake

cd build
cmake ..	//注意是空格后..  是camke前面目录中的CMakeLists.txt
make -j8	//-j8和进程有关,可以是make/make -4/make -j6

出现图中红框代表生成成功
在这里插入图片描述
最后

./Demo

出现lena的图片窗口代表成功

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04下使用cmake编译一个OpenCV程序(编写CMakeLists.txt文件) 的相关文章

随机推荐

  • 相机内参标定,相机和激光雷达联合标定

    相机内参标定 xff0c 相机和激光雷达联合标定 一 相机标定原理1 1 成像过程1 2 标定详解 二 相机和激光雷达联合标定2 1 标定方法汇总2 2 Autoware的安装与运行2 2 1 安装方式2 2 2 安装Autoware的依赖
  • Ubuntu20.04安装和编译运行lidar_align来联合标定lidar与imu的外参

    Ubuntu20 04安装和编译运行lidar align来联合标定lidar与imu的外参 一 编译运行lidar align1 1 下载地址1 2 编译1 2 1 nlopt问题解决1 2 2 c 43 43 问题解决 二 处理数据集三
  • ROS小工具学习与使用

    ROS小工具学习与使用 rqt的使用 rqt bag工具 rqt bag span class token operator lt span your bagfile span class token operator gt span sp
  • printf函数的实现方法

    printf是一个C库函数 xff0c 用于向标准输出 xff08 stdout xff09 写入格式化的字符串 如果格式字符串包含格式说明符 xff08 以 开头的子序列 xff09 xff0c 则需要额外的参数来替换相应的说明符 实现p
  • linux下查看cmake的版本

    方法 在命令行输入指令 xff1a cmake span class token operator span version
  • C++常用标准库

    STL是Standard Template Library的简称 xff0c 中文名标准模板库 从根本上说 xff0c STL是一些 容器 的集合 xff0c 这些 容器 有list vector set map等 xff0c STL也是算
  • 如何轻松写出正确的链表代码

    如何轻松写出正确的链表代码 xff1f 1 理解指针或引用的含义 将某个变量赋值给指针 xff0c 实际上就是将这个变量的地址赋值给指针 xff0c 或者反过来说 xff0c 指针中存储了这个变量的内存地址 xff0c 指向了这个变量 xf
  • JVM之虚拟机栈详细讲解

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域 这些区域有各自的用途 xff0c 以及创建和销毁的时间 xff0c 有的区域随着虚拟机进程的启动而一直存在 xff0c 有些区域则是依赖用户线程的启动和结
  • 【图像处理】特征点算法整理总结

    特征点检测 1 Susan SUSA xff08 Smallest Univalue Segment Assimilating Nucleus xff09 算子是一种高效的边缘和角点检测算子 xff0c 并且具有结构保留的降噪功能 原理 用
  • 图像特征点匹配算法

    sift https blog csdn net weixin 38404120 article details 73740612 https blog csdn net abcjennifer article details 763968
  • 算法目标检测面经

    1 自我介绍 2 简历上的项目 网易雷火 AI研究员 1 ResNet FCN Fasterrcnn 2 膨胀腐蚀的原理 3 均值滤波的原理 时间复杂度 怎么优化 4 第k大的数 topK个数 网易互娱预研 深度学习计算机视觉 1 语义分割
  • 图像配准(Image Registration)简介

    图像配准在目标检测 模型重建 运动估计 特征匹配 xff0c 肿瘤检测 病变定位 血管造影 地质勘探 航空侦察等领域都有广泛的应用 每一种配准方法通常都针对某个具体问题而设计的 xff0c 众多方法中 xff0c 唯一的共性就是每个配准问题
  • SSD算法详解

    转载 xff1a https blog csdn net ytusdc article details 86577939 SSD github https github com weiliu89 caffe tree ssd SSD pap
  • 深度学习-目标检测评估指标P-R曲线、AP、mAP

    基本概念 P R曲线中 xff0c P为图中precision xff0c 即精准度 xff0c R为图中recall xff0c 即召回率 Example 下面通过具体例子说明 首先用训练好的模型得到所有测试样本的confidence s
  • 使用gitlab初次上传代码

    提要 项目开发中需要使用gitlab来管理代码 xff0c 将自己开发的模块上传到gitlab 第一次使用这个代码管理仓库 xff0c 记录一下 方法 1 首先注册gitlab的账号 这个在百度上搜一下gitlab的官网 xff0c 进去后
  • Keil5添加.c文件与.h文件的方法-导入支持库-新大陆物联网竞赛-Lora模块&NBIOT模块例程-添加导入文件

    一 概述 在某些情况下 xff0c 我们使用现用的物联网开发例程 xff0c 例如新大陆物联网的Lora与NBIOT的例程 xff0c 我们对其例程内目前所有的库不满意 xff0c 不足以实现开发需要的功能 xff0c 我们需要在原有工程上
  • 初探DSO-SLAM并运行dso_ros

    最近在做SLAM相关的工作 xff0c 用思岚的A2激光雷达在turtlebot3上测试SLAM建图效果 xff0c 感觉还是不错的 由于项目在方案上还没有确定选择哪种作为SLAM的最终方案 xff0c 在我测试奥比中光ASTRA mini
  • 虚拟机中安装CMake工具

    https www cnblogs com yanqingyang p 12731855 html
  • 寻路系统:动态障碍物

    寻路的相关参数 需要先勾选 游戏场景中所有需要烘焙路径信息的游戏对象状态为 static 然后点开windos菜单下的navigation窗口进行烘培 Navigation Static xff1b 表示该游戏对象是否参与导航网格的烘培 G
  • Ubuntu18.04下使用cmake编译一个OpenCV程序(编写CMakeLists.txt文件)

    导航 1 安装OpenCV1 1首先安装OpenCV 1 2定位OpenCV 2 创建一个项目3 编写一个基础OpenCV程序4 编写CMakeLists txt文件 为了记录以及防止遗忘 xff0c 备份一个大致能满足运行的CMakeLi