将OpenCV与gcc和CMake结合使用

 返回:OpenCV系列文章目录(持续更新中......)

上一篇:OpenCV4.9.0开源计算机视觉库在 Linux 中安装

下一篇:

引言:

近年来,计算机视觉技术在图像处理、目标检测和机器人等方面得到了广泛的应用。OpenCV是一个业界著名的计算机视觉库,具有高效性、可扩展性和跨平台性的特点。为了更好地使用OpenCV,我们可以结合gcc和CMake来编译和构建我们的项目。
gcc是一种常用的C/C++编译器,可以在Windows、Linux和Mac等多个平台上使用。CMake是一个跨平台的构建工具,它可以帮助我们自动化构建过程,包括编译、链接和测试等。
本文将演示如何将OpenCV与gcc和CMake结合使用。我们将介绍CMake的基本使用和如何构建一个简单的OpenCV项目。 

警告:

本文可以包含过时的信息。

注意:

我们假设您已在工作站中成功安装了 OpenCV。如未成功请参阅上一篇文章成功部署后再学习本文。

在代码中使用 OpenCV 的最简单方法是使用 CMake。一些优点(摘自 Wiki):
在 Linux 和 Windows 之间移植时无需更改任何内容
可以很容易地与CMake的其他工具(即Qt,ITK和VTK)结合使用。
如果您不熟悉 CMake,请查看其网站上的教程。

步骤:

使用 OpenCV 创建程序
让我们使用一个简单的程序DisplayImage.cpp如下所示。
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{if ( argc != 2 ){printf("usage: DisplayImage.out <Image_Path>\n");return -1;}Mat image;image = imread( argv[1], IMREAD_COLOR );if ( !image.data ){printf("No image data \n");return -1;}namedWindow("Display Image", WINDOW_AUTOSIZE );imshow("Display Image", image);waitKey(0);return 0;
}
 创建CMake文件

接下来你需要创建你的CMakeLists.txt文件。它应该如下文:

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
生成可执行文件

 用以命令如使用CMake的任何其他项目一样进行:

cd <DisplayImage_directory>
cmake .
make
 结果:

到现在为止,您应该有一个可执行文件(在本例中称为 DisplayImage)。您只需要运行它,并给出图像位置作为参数,即:

./DisplayImage lena.jpg

 你应该得到一个漂亮的窗口,如下所示:

还有一个方案供大家参考:

1. 简单的OpenCV项目
首先,我们将创建一个简单的OpenCV项目作为示例。我们将使用C++编写一个程序,该程序将加载一张图片并将其转换成灰度图像。以下是代码:

#include <opencv2/opencv.hpp>
using namespace cv;
int main( int argc, char** argv )
{Mat image;image = imread( argv[1], 1 );if ( !image.data ){printf("No image data \n");return -1;}cvtColor( image, image, COLOR_BGR2GRAY );namedWindow( "Display Image", WINDOW_AUTOSIZE );imshow( "Display Image", image );waitKey(0);return 0;
}

这个程序使用OpenCV加载一张图片,将其转换成灰度图像,并在新窗口中显示。在项目中使用OpenCV,需要在代码中包含OpenCV头文件和链接OpenCV库文件。
2.创建CMakeLists.txt文件
接下来,我们需要创建一个名为CMakeLists.txt的文件。它应该放在项目的根目录中。CMakeLists.txt文件包含了一些指令,告诉CMake如何构建我们的项目。
以下是CMakeLists.txt文件的内容:

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

这个文件使用CMake的一些指令来构建我们的项目。其中:
* cmake_minimum_required指令用于指定最低版本的CMake。此示例为2.8。
* project指令指定项目的名称。
* find_package指令查找OpenCV库。
* include_directories指令用于添加头文件路径。
* add_executable指令用于将源代码编译成可执行文件。
* target_link_libraries指令用于链接库文件。
3.构建项目
现在我们已经有了CMakeLists.txt文件,我们可以用CMake来构建我们的项目。在终端中切换到项目目录中,然后输入以下命令:

$ cmake .
$ make

第一个命令将根据CMakeLists.txt文件生成Makefile文件,第二个命令将根据Makefile文件构建我们的可执行文件。
如果一切顺利,你应该在项目目录下看到一个名为DisplayImage的可执行文件。
4.运行程序
现在我们已经成功构建了我们的OpenCV项目,让我们来运行它。在终端中输入以下命令:

$ ./DisplayImage image.jpg

这个命令将加载名为image.jpg的图片,将其转换成灰度图像并在窗口中显示。
 结论:

在本文中,我们介绍了如何将OpenCV与gcc和CMake结合使用。我们创建了一个简单的OpenCV项目,并演示了如何使用CMake来构建该项目。这里只展示了OpenCV和CMake的基本使用,你可以进一步探索它们的其他高级功能。希望这篇文章对你有所帮助。 

参考文献:

1.《Using OpenCV with gcc and CMake》Ana Huamán

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

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

相关文章

论文篇00-【历年论文真题考点汇总】与【历年论文原题2009~2023年文字版记录】(2024年软考高级系统架构设计师冲刺知识点总结-论文篇-先导篇)

专栏系列文章推荐: 案例分析篇00-【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】 综合知识篇00-综合知识考点汇总目录 ...... 历年真题论文题考点汇总 历年软考系统架构设计师论文原题(2009-2022年) 因最新的2023年目前仅能搜索到回忆版,等楼主搜集到…

关于数据通信知识的补充——第二篇

目录 四.二层交换机 5.实现不同vlan通信的原理 方法一&#xff1a;路由器网关 方法二&#xff1a;单臂路由 方法三&#xff1a;三层交换机 五.三层路由技术 &#xff08;1&#xff09;直连路由 &#xff08;2&#xff09;静态路由 &#xff08;3&#xff09;动态路由 …

【Stable Diffusion】入门-04:不同模型分类+代表作品+常用下载网站+使用技巧

目录 1 模型简介2 模型文件构成和加载位置2.1 存储位置2.2 加载模型 3 模型下载渠道3.1 HuggingFace3.2 Civitai 4 模型分类4.1 二次元模型4.2 写实模型4.3 2.5D模型 1 模型简介 拿图片给模型训练的这个过程&#xff0c;通常被叫做“喂图”。模型学习的内容不仅包括对具体事物…

Linux中 vim 编辑器的使用

文章目录 前言一、vim编辑器模式二、简单的插入、保存和退出三、 命令模式下常用命令即其作用1. 命令模式 思维导图 前言 首先&#xff0c;了解一下 什么是vim 编辑器&#xff1f;在不同的系统中&#xff0c;文本的管理也会不同&#xff1b;windos系统就不多说了&#xff0c…

compile→错误: 不支持发行版本 17

错误: 不支持发行版本 17 具体错误描述如下&#xff1a; [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project big-event: Fatal error compiling: 错误: 不支持发行版本 17 -> [Help 1] [ERROR] …

简易版 RPC 框架实现 1.0 -http实现

RPC 是“远程过程调用&#xff08;Remote Procedure Call&#xff09;”的缩写形式&#xff0c;比较通俗的解释是&#xff1a;像本地方法调用一样调用远程的服务。虽然 RPC 的定义非常简单&#xff0c;但是相对完整的、通用的 RPC 框架涉及很多方面的内容&#xff0c;例如注册发…

Redisson 分布式锁原理分析

Redisson 分布式锁原理分析 示例程序 示例程序&#xff1a; public class RedissonTest {public static void main(String[] args) {Config config new Config();config.useSingleServer().setPassword("123456").setAddress("redis://127.0.0.1:6379"…

cool 中的Midway ----node.js的TypeORM的使用

1.介绍 TypeORM | Midway TypeORM 是 node.js 现有社区最成熟的对象关系映射器&#xff08;ORM &#xff09;。本文介绍如何在 Midway 中使用 TypeORM 相关信息&#xff1a; 描述可用于标准项目✅可用于 Serverless✅可用于一体化✅包含独立主框架❌包含独立日志❌ 和老写…

第二十四天-数据可视化Matplotlib

目录 1.介绍 2.使用 1. 安装&#xff1a; 2.创建简单图表 3.图表类型 1.一共分为7类 2.变化 1.折线图 3.分布 ​编辑 1.直方图 2.箱型图 4.关联 1. 散点图&#xff1a; 2.热力图&#xff1a; 5.组成 1.饼图 2.条形图 6.分组 1.簇型散点图 2.分组条形图 3.分…

JOSEF约瑟 TQ-100同期继电器 额定直流电压220V 交流电压100V±10V

TQ-100型同期继电器 TQ-100同期继电器 ​ l 应用 本继电器用于双端供电线路的自动重合闸和备用电源自投装置中&#xff0c;以检查线路电压与母线电压的 相位差和幅值差。 2 主要性能 2 1采用进口集成电路和元器件构成&#xff0c;具有原理先进、性能稳定、可靠性高、动作值精…

Git版本管理--远程仓库

前言&#xff1a; 本文记录学习使用 Git 版本管理工具的学习笔记&#xff0c;通过阅读参考链接中的博文和实际操作&#xff0c;快速的上手使用 Git 工具。 本文参考了引用链接博文里的内容。 引用: 重学Git-Git远程仓库管理_git remote add origin-CSDN博客 Git学习笔记&am…

[自研开源] MyData 数据集成之数据过滤 v0.7.2

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;https://demo.mydata.work 交流Q群&#xff1a;430089673 概述 本篇基于…

javaEE——线程的等待和结束

文章目录 Thread 类及常见方法启动一个线程中断一个线程变量型中断调用 interrupt() 方法来通知观察标志位是否被清除 等待一个线程获取当前线程引用休眠当前线程 线程的状态观察线程的所有状态观察 1: 关注 NEW 、 RUNNABLE 、 TERMINATED 状态的切换 多线程带来的风险为什么会…

【大模型系列】问答理解定位(Qwen-VL/Llama2/GPT)

文章目录 1 Qwen-VL(2023, Alibaba)1.1 网络结构1.2 模型训练 2 Llama2(2023, Meta)2.1 网络结构2.1.1 MHA/GQA/MQA2.1.2 RoPE(Rotary Position Embedding, 旋转式位置编码)2.1.3 RMSNorm 2.2 推理2.2.1 集束搜索(beam search)2.2.2 RoPE外推 3 GPT系列(OpenAI) 1 Qwen-VL(2023…

android中单例模式为什么会引起内存泄漏?

单例模式使用不恰当会造成内存泄漏。因为单例的静态特性使得单例的生命周期和应用的生命周期一样长&#xff0c; 如果一个对象已经不需要使用了&#xff0c;但是单例对象还持有该对象的引用&#xff0c;那么这个对象就不能被正常回收&#xff0c;因此会导致内存泄漏。 举个例子…

【数据可视化】使用Python + Gephi,构建中医方剂关系网络图!

代码和示例数据下载 前言 在这篇文章中&#xff0c;我们将会可视化 《七版方剂学》 的药材的关系&#xff0c;我们将使用Python制作节点和边的数据&#xff0c;然后在Gephi中绘制出方剂的网络图。 Gephi是一个专门用于构建网络图的工具&#xff0c;只要你能提供节点和边的数…

Stable Diffusion科普文章【附升级gpt4.0秘笈】

随着人工智能技术的飞速发展&#xff0c;我们越来越多地看到计算机生成的艺术作品出现在我们的生活中。其中&#xff0c;Stable Diffusion作为一种创新的图像生成技术&#xff0c;正在引领一场艺术创作的革命。本文将为您科普Stable Diffusion的相关知识&#xff0c;带您走进这…

Flink 集群部署模式

文章目录 前言一、会话模式&#xff08;Session Mode&#xff09;二、单作业模式&#xff08;Per-Job Mode&#xff09;三、应用模式&#xff08;Application Mode&#xff09; 前言 Flink支持多种集群部署模式&#xff0c;以满足不同场景和需求。以下是Flink的主要集群部署模…

springboot多模块下swaggar界面出现异常(Knife4j文档请求异常)或者界面不报错但是没有显示任何信息

继上一篇博文&#xff0c;我们解决了多模块下扫描不到子模块的原因,建议先看上一个博客了解项目结构&#xff1a; springboot 多模块启动报错Field XXX required a bean of type XXX that could not be found. 接下来我们来解决swaggar异常的原因&#xff0c;我们成功启动项目…

QML 布局管理器之ColumnLayout

一.ColumnLayout讲解 QML中的ColumnLayout是一种布局元素&#xff0c;用于在垂直列中排列其子元素。它的主要使用下列附加属性: Layout.minimumWidth Layout.minimumHeight Layout.preferredWidth Layout.preferredHeight Layout.maximumWidth Layout.maximumHeight Layout.fil…