使用CMake编译基于OpenCV开发的程序的方法

news2024/12/25 12:34:33

方法

使用CMake编译OpenCV开发的程序分为以下几个步骤:

  1. 安装编译器和代码编辑器。
    • Windows安装Visual Studio社区版,集成了编译器和代码编辑器。
    • Ubuntu安装gcc、g++和VSCode:
sudo apt install gcc gc++
  • macOS安装XCode Commandline Tools和VSCode:
sudo xcode-select --install
  1. 安装CMake。
    • Windows下载安装程序,安装时勾选将cmake加入环境变量;若未勾选,需要手动将cmake.exe所在目录添加到系统或者用户PATH变量中。
    • Ubuntu可用apt安装:
sudo apt install -y cmake
  • macOS可用Homebrew安装:
brew install cmake
  1. 安装OpenCV。
    • Windows可从官网下载二进制包,解压到指定目录:如D:/。
    • Ubuntu可用apt安装:
sudo apt install -y opencv*
  • macOS可以用Homebrew安装:
# 2022.12.22, OpenCV 4.6.0_1
brew install opencv
  • 三大桌面操作系统都可以从源码编译OpenCV(4.6.0)。
  1. 新建环境变量OpenCV_DIR,将OpenCV的OpenCVConfig.cmake文件所在目录添加进去。
    • Windows是解压opencv目录+build或者cmake目录(D:/opencv/build或者D:/opencv/cmake)。
    • Ubuntu和macOS无需设定OpenCV_DIR(OpenCV安装时会将cmake配置文件自动添加到cmake modules中);但如果未自动配置,可以手动设定OpenCV_DIR为/usr/local/share/OpenCV
  2. 使用以下CMakeLists.txt模版编译源代码problem1_read_image.cpp(如果你的源码文件不一样,要修改为你的源码文件名):
# 注意:CMake也是一种编程语言,是大小写敏感的!
# 项目名称
PROJECT(problem1)
# CMake版本要求
cmake_minimum_required(VERSION 3.5)

# 设定OpenCV的环境变量OpenCV_DIR;如果没有在Windows系统中设置,可以在这里设置;
# 否则find_package会报找不到OpenCV库的错误。
# set(OpenCV_DIR /usr/local/share/OpenCV)

# 查找OpenCV库
find_package(OpenCV REQUIRED)
# 添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加自己编写的源文件 problem1_read_image.cpp,设定生成的目标文件名是 problem1
add_executable(problem1 problem1_read_image.cpp)
# 添加链接库搜索目录
link_directories(${OpenCV_LIBRARY_DIRS})
# 添加链接库
target_link_libraries(problem1 ${OpenCV_LIBS})
  1. 编译生成可执行文件
    在Ubuntu或macOS上打开终端(在Windows上打开命令提示符),切换到在源码cpp文件和input.png所在目录,然后执行
mkdir build
cd build
cmake ..
make -j
  • Ubuntu和macOS会直接生成可执行文件,无需额外操作。
  • Windows上使用Visual Studio打开生成的sln项目,继续执行编译才能得到可执行文件;
  1. 运行生成的可执行文件
# mac/Ubuntu
./problem1
# Windows
problem1.exe
  1. 编译和执行结果
    编译和执行结果
    图1 编译和执行结果

附录1 测试代码(problem1_read_image.cpp)

/*
 * @Descripttion: C++ Practice
 * @Author: Tom Heaven
 * @Date: 2022-12-21 15:55:10
 * @LastEditTime: 2022-12-22 15:40:24
 */

#include <cstdio>
#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
  char filename[255] = "../input.png";
  Mat image = imread(filename);
  Vec3b pixel = image.at<Vec3b>(50, 50);
  printf("(R,G,B)=(%d,%d,%d)\n", pixel[2], pixel[1], pixel[0]);
  return 0;
}

附录2 输入图像(input.png)

input.png
图2 Input.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言应用xgboost进行机器学习(1)

XGBoost 机器学习模型是一种高效且可扩的展的机器学习分类器&#xff0c;由 Chen 和 Guestrin 在 2016 年推广。XGBoost原理是是在决策树的基础上产生迭代&#xff0c;它以 boosting 的方式结合了多个决策树。通常创建每棵新树是为了通过梯度提升来减少先前模型的误差&#xff…

鸿翼档案,将非结构化数据治理能力应用于档案管理的先行者

数字化时代&#xff0c;每个人每天都要接触大量的数据。人们通过分析数据获取信息与知识&#xff0c;帮助自身更好地理解社会动向&#xff0c;掌握行业发展。我们每天都会接触到多种多样的数据&#xff0c;这些数据根据结构可划分为三种&#xff1a;结构化数据、非结构化数据和…

Android设计模式详解之责任链模式

前言 责任链模式是行为型设计模式&#xff1b; 定义&#xff1a;使多个对象都有机会处理请求&#xff0c;从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有对象处理它为止。 使用场景&#xff1a;…

基于概率论的MATLAB仿真,内容包括非共轭条件下的后验概率的推导,共轭条件下的非完备集的后验概率的推导

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 1.1先验概率的推导 根据贝叶斯概率论可知&#xff0c;某一事件的后验概率可以根据先验概率来获得&#xff0c;因此&#xff0c;这里首先对事件的先验概率分布进行理论的推导。假设测量的腐蚀数据…

[一个无框架的javaweb demo]番荒之冢 --番剧灯塔站

文章目录番荒之冢 --番剧灯塔站理念大致设计权限分配番剧信息用户/管理员信息邮箱正则匹配URL正则匹配留言信息数据库设计useranimationcommentfavoranim技术栈(无框架)功能一个简单的登录(进行了路由限制, 若未登录都会跳转至此)首页我的我的资料追番清单留言区番剧详情退出登…

华为云-计算云服务介绍

前言 相信很多小伙伴在刚开始接触各类云产品的时候&#xff0c;被各种各样的云产品类如规格、型号、价格、适用场景等问题所困扰。本文就给大家介绍一下华为云常见云产品的规格区别和适用场景。帮助大家选择合适的云产品。 文章目录前言一、计算云服务1.弹性云服务器2.裸金属服…

Apache Flink 部署模式

目录 会话模式 Session Mode 单作业模式 Per-Job Mode (deprecated) 应用模式 Application Mode 在一些应用场景中&#xff0c;对于集群资源分配和占用的方式&#xff0c;可能会有特定的需求。Flink 为各种场景提供了不同的部署模式&#xff0c;主要有以下三种&#xff1a; i…

ArcGIS | NetCDF数据在ArcMap中的使用

NetCDF又称科学数据集&#xff0c;可以存储温度、湿度、风速、风向等多个维度的文件格式。以中国区域地面气象要素驱动数据集为例进行介绍。 中国区域地面气象要素驱动数据集&#xff0c;包括近地面气温、近地面气压、近地面空气比湿、近地面全风速、地面向下短波辐射、地面向…

P6 PyTorch 常用数学运算

前言&#xff1a; 这里主要介绍一下PyTorch 的常用数学运算 目录&#xff1a; 1&#xff1a; add|sub 加减法 2: mul/div 乘/除运算 3: 矩阵乘法 4 2D矩阵转置 5 其它常用数学运算 6 clamp 梯度剪裁 一 加减法 1.1 加法 可以直接通过符号 或者 torch.add # -*- co…

MySQL数据库的安装、创建库及连接取数

安装MySQL数据库MySQL数据库简介安装MySQL数据库下载安装包安装MySQLMySQL创建一个新的数据库&#xff0c;并在其中创建新的数据表&#xff0c;填充测试数据并查看mysql>模式下输入的每句sql语句都要以;结尾&#xff1b;若多行语句无;&#xff0c;则被默认为一条语句未输入完…

UNIX环境高级编程——1.UNIX基础知识

UNIX基础知识 UNIX体系结构 严格意义上来说&#xff0c;可以将操作系统定义为一种软件&#xff0c;控制计算机硬件资源&#xff0c;提供程序运行环境。通常把这种软件成为内核。内核的接口被成为系统调用&#xff08;system call&#xff09;。公共函数库构建在系统调用接口之…

碳酸锂、碳酸氢锂除钙镁离子交换柱

锂及其盐类是国民经济和国防建设中具有重要意义的战略物资&#xff0c;也是与人们生活息息相关的能源材料。而碳酸锂作为锂盐的基础盐&#xff0c;是制取锂化合物和金属锂的原料&#xff0c;可作铝冶炼的电解浴添加剂&#xff0c;亦可用于合成橡胶、染料、半导体等方面。电池级…

Orin+ GMSL (Ser 9295+Des 9296)流程分析(1)

文章目录 1 前言2 流程分析2.1 整体架构2.2 Ser端2.2 Des端2.3 软件架构2.4 设备树文件分析2.5 VI 接口2.7 CSI 接口1 前言 Maxim 支持GMSL作为汽车行业视频应用的通信链路。GMSL基于SerDes (Serializer-Deserializer)技术;也就是说,它在发送端使用序列化器,在接收端使用反序…

观察UE4中引用查看器(ReferenceViewer)是从哪得到数据的

前言 引用查看器(ReferenceViewer)可以显示资源引用关系数据&#xff0c;我想要知道这个数据是如何得到的。因此从它的界面代码开始一步步往里看。 &#xff08;到最后才发现&#xff0c;得到引用关系数据的接口很简单&#xff0c;而且是蓝图可访问的&#xff0c;详见本篇的【…

冬至已至,你的在职读研2023能在社科院与杜兰大学金融管理硕士项目实现吗

杜甫《小至》中写道“天时人事日相催&#xff0c;冬至阳生春又来”。不知不觉间冬至悄然到来&#xff0c;过完冬至天气日渐回暖&#xff0c;春天即将回来了。时光总是匆匆而逝&#xff0c;一晃2022年将要与我们说再见了。这一年来&#xff0c;反复无常的疫情&#xff0c;瞬息万…

【学习笔记】JDK源码学习之HashTable(附带面试题)

【学习笔记】JDK源码学习之HashTable(附带面试题) 其他好文&#xff1a; 【学习笔记】JDK源码学习之LinkedHashMap&#xff08;附带面试题【学习笔记】JDK源码学习之HashMap&#xff08;附带面试题&#xff09;【学习笔记】JDK源码学习之Vector&#xff08;附带面试题&#x…

OpenCV基础入门

主要了解包括 opencv 的下载和环境配置opencv目录的了解opencv中highgui模块opencv中core模块opencv中imgproc模块opencv中feature2d模块opencv视频操作 1.OpenCV简介 图像是人类视觉的基础&#xff0c;是自然景物的客观反映。 模拟图像通过某种物理量的强弱变化来记录图像…

中小企业远程办公指南:10分钟搭建,即插即用

不装了 我成小阳人了 虽然还没算过来人&#xff0c;但是想要提醒一下小伙伴“能不阳就别阳”&#xff0c;“能晚阳就晚阳”&#xff01; 真的很痛很难受。 为了应对即将到来的高峰&#xff0c;我们在上周末紧急采取了远程居家办公模式。 不得不说&#xff0c;公司应对突发情…

彻底卸载2345王牌输入法的方法

2345王牌输入法是2345公司旗下一款中文输入法软件&#xff0c;主打纯净输入&#xff0c;有用户用了一段时间觉得不太习惯&#xff0c;就想卸载装别的软件&#xff0c;但是发现怎么也卸不掉&#xff0c;下面小编就给大家介绍彻底卸载2345王牌输入法的方法。 方法一&#xff1a;使…

线性代数 --- Gauss消元的部分主元法和完全主元法(补充)

Gauss消元的部分主元法和完全主元法(补充) 本文主要是对下文的补充&#xff0c;而补充的主要内容就是如何直接求出(手动)部分主元法的P矩阵和L矩阵&#xff1a; 线性代数 --- Gauss消元的部分主元法和完全主元法_松下J27的博客-CSDN博客_高斯消元的主元是什么Gauss消元的部分主…