当前位置: 首页 > news >正文

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

方法

使用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

相关文章:

  • 网站社区怎么创建/宁波seo软件免费课程
  • 建设教育协会培训网站/营销培训总结
  • wordpress编辑小工具栏/网站优化名词解释
  • ps 怎么做网站搜索框/互联网营销有哪些方式
  • dw做网站导航条/独立网站怎么做
  • 现代农业建设 乡网站/企业门户网站模板
  • Python基础知识入门(四)
  • 打造灵动办公新体验,金山数字办公助力建筑央企实现办公“效率+安全“双提升
  • 博奥智源,常态化教学评估反馈与学情监测系统开发功能设计
  • GPU与CPU的性能比较及影响因素
  • 我在简历里写了TCP长连接架构设计,面试官都被我惊艳了
  • 多准则决策问题评估方法 | 层次分析法(含代码)
  • 2022年哪些工具适合设计企业产品手册?
  • 华为OD机试真题 Python 实现【最多等和不相交连续子序列】【2022.11 Q4 新题】
  • 【Qt源码笔记】深谈 Qt 绘制
  • PS CS6视频剪辑基本技巧(三)添加声音和字幕
  • [阿里云堡垒机]如何优雅使用SCP
  • 轮廓图编程-自定义QChartView