OpenCV的Hello World

news2024/9/21 16:39:34

按照前文的步骤,我们已经在Windows机器上把OpenCV源代码编译成了DLL。接下来的问题自然是,我们怎么在自己的项目中使用OpenCV?我们将从零开始编写第一个OpenCV “Hello World”程序。通过本文的练习,大家将掌握:

  1. 在自己的项目中配置OpenCV开发环境,包括include目录、lib目录等等;
  2. 通过cv::imread函数读取一个图像文件;
  3. 通过cv::imshow函数将图像在窗口中显示出来;
  4. 通过cv::imwrite函数将图像写入一个文件。

让我们开始吧!先用Visual Studio创建一个C++的控制台程序,项目命名为OpenCVFirstApp,并让它与opencv源代码目录平级,看起来是这样的:

接着,打开OpenCVFirstApp项目属性窗口,在C/C++页面的“附加包含目录”中加入:

..\opencv\include

..\opencv\build

..\opencv\modules\core\include

..\opencv\modules\highgui\include

..\opencv\modules\imgproc\include

..\opencv\modules\imgcodecs\include

..\opencv\modules\videoio\include

其中,第一个是OpenCV项目的顶级包含目录,第二个是之前编译OpenCV源码时的生成目录,第三个往下是OpenCV各个核心模块的包含目录,可以依据你的项目实际使用情况、用到了哪些模块就把这些模块的包含目录加进来。

再接着,在项目的属性页点击“链接器”,在“输入” | “附加依赖项” 中增加配置:

Debug版本链接的库:

..\opencv\build\lib\Debug\opencv_core4100d.lib

..\opencv\build\lib\Debug\opencv_highgui4100d.lib

..\opencv\build\lib\Debug\opencv_imgproc4100d.lib

..\opencv\build\lib\Debug\opencv_imgcodecs4100d.lib

..\opencv\build\lib\Debug\opencv_videoio4100d.lib

Release版本链接的库:

..\opencv\build\lib\Release\opencv_core4100.lib

..\opencv\build\lib\Release\opencv_highgui4100.lib

..\opencv\build\lib\Release\opencv_imgproc4100.lib

..\opencv\build\lib\Release\opencv_imgcodecs4100.lib

..\opencv\build\lib\Release\opencv_videoio4100.lib

然后,就可以开始编写程序代码了。偷个懒,从opencv开源项目的samples\cpp\tutorial_code\introduction\windows_visual_studio_opencv\introduction_windows_vs.cpp抄一下吧O(∩_∩)O:

// OpenCVFirstApp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>

#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    if (argc != 2)
    {
        cout << " Usage: " << argv[0] << " ImageToLoadAndDisplay" << endl;
        return -1;
    }

    Mat image;
    image = imread(argv[1], IMREAD_COLOR); // Read the file

    if (image.empty()) // Check for invalid input
    {
        cout << "Could not open or find the image" << std::endl;
        return -1;
    }

    namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display.
    imshow("Display window", image); // Show our image inside it.

    imwrite("D:\\opencv_copy.png", image); // Write to a new file

    waitKey(0); // Wait for a keystroke in the window
    return 0;
}

然后,编译,运行!然后…

怎么回事?忘了非常重要的一步哦:需要把OpenCV的运行时库(在opencv\build\bin目录下)拷贝到目标工程里来,具体而言就是这5个DLL:opencv_core4100.dll、opencv_highgui4100.dll、opencv_imgcodecs4100.dll、opencv_imgproc4100.dll、opencv_videoio4100.dll。这是Release版本的库;Debug版本需要拷贝文件名以字母“d”结尾的一组DLL。

OpenCVFirstApp的完整代码:https://github.com/luqiming666/OpenCVFirstApp

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

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

相关文章

你真的懂什么是串口吗?

你真的懂什么是串口吗&#xff1f; 文章目录 你真的懂什么是串口吗&#xff1f;问题什么是串口概念4种电平及其特性串口与电脑USB口通信 通讯分类常见的串行通信接口通信方式分类串行通信并行通信 传输方向分类同步方式分类PS&#xff1a;波特率和比特率 RS232 和 RS485RS232 引…

Django 中显示图片

在 Django 中显示图片的基本步骤包括&#xff1a;配置静态文件和媒体文件的处理、上传图片、以及在模板中显示图片。以下是详细步骤&#xff1a; 问题背景&#xff1a; 我在学习 Django 并在构建一个简单的网站&#xff0c;我尝试使用模板语言添加一些图片&#xff0c;但显示的…

升级阿里云linux服务器上的php版本

查看已安装的php软件包 [rootiZbp13pl2v34qj0thwq9aiZ ~]# rpm -qa|grep php php74-php-common-7.4.26-1.el7.remi.x86_64 oniguruma5php-6.9.7.1-1.el7.remi.x86_64 php74-php-gd-7.4.26-1.el7.remi.x86_64 php74-php-opcache-7.4.26-1.el7.remi.x86_64 php74-php-json-7.4.2…

阿里云Elasticsearch 企业级AI搜索方案发布

在AI技术日新月异的今天&#xff0c;尤其是大语言模型的兴起&#xff0c;企业智能化场景的解决方案正经历一场前所未有的革新。然而&#xff0c;大模型在实际应用中面临的挑战不容小觑&#xff0c;如何高效、精准地服务于企业的个性化需求成为关键。阿里云搜索产品团队通过阿里…

QT文件的操作

QT文件的操作 学习QT的文件操作类:Qfile、QTextStream。利用QtCreator工具实现文件的操作过程。通过文件读取样式表文件,动态的改变控件的外观。QFile提供了操作文件的常用功能。是一种IO设备,可以用来读写文本文件和二进制文件,也可以用来读写QT的资源文件。QFile类可以单…

仓库与文件的提交/修改/删除

目录 1. 创建仓库 ​编辑​编辑 2. 界面解释 3. 再创建仓库 4. 移除仓库 5. 本地添加文件到仓库 ​编辑​编辑 6. 比对&#xff0c;提交 7. 修改&#xff0c;提交 8. 查询版本号 9. 删除文件 git 是分布式版本控制工具&#xff0c;需要将中央服务器克隆到本地&#…

【Spark集群部署系列一】Spark local模式介绍和搭建以及使用(内含Linux安装Anaconda)

简介 注意&#xff1a; 在部署spark集群前&#xff0c;请部署好Hadoop集群&#xff0c;jdk8【当然Hadoop集群需要运行在jdk上】&#xff0c;需要注意hadoop&#xff0c;spark的版本&#xff0c;考虑兼容问题。比如hadoop3.0以上的才兼容spark3.0以上的。 下面是Hadoop集群部署…

wps怎么找回未保存的文件?分享三个文件恢复方法

在编辑WPS文档时&#xff0c;偶尔会遇到未保存就意外关闭的情况&#xff0c;这不仅令人沮丧&#xff0c;还可能导致重要信息的丢失。但幸运的是&#xff0c;WPS提供了多种途径来帮助用户找回这些未保存的宝贵文件。从利用WPS的自动备份与恢复功能&#xff0c;到检查最近文档列表…

docker安装es8和kibana

es8、kibana安装、ik分词器使用 1 拉取镜像2 创建网络3 安装ES3.1 启动临时的ES3.2 运行es3.3 修改用户密码 4 安装kibana4.1 启动临时的kibana4.2 修改配置文件4.3 重启kibana4.4 调用5601端口&#xff08;我映射的是8082&#xff09; 5 安装ik分词器&#xff08;离线安装&…

聚众力·链未来 | 2024 FISCO BCOS认证合作伙伴开放申请

“独行虽速&#xff0c;众行方远”&#xff0c;一个充满蓬勃生命力的开源社区需要众多伙伴结伴同行&#xff0c;彼此支持&#xff0c;方能行远。开源7年来&#xff0c;FISCO BCOS开源社区始终秉持开放、连接的开源精神&#xff0c;与业界伙伴共同推动国产开源联盟链生态可持续性…

江理工文档管理系统的设计与实现

TOC springboot148江理工文档管理系统的设计与实现 绪论** 1.1 研究背景 在这个推荐个性化的时代&#xff0c;采用新技术开发一个文档系统来分享和展示内容是一个永恒不变的需求。本次设计的文档管理系统有管理员和用户两个角色。管理员功能有论坛管理&#xff0c;公告管理…

【网络协议】网络劫持 - ARP/DNS欺骗篇

前言 网络劫持是一种网络攻击技术&#xff0c;攻击者通过拦截、篡改或重定向数据流量&#xff0c;控制用户的网络通信路径&#xff0c;干扰正常的网络服务。其方式可能包括DNS劫持、ARP欺骗和HTTP劫持等。通过这些手段&#xff0c;攻击者可以窃取敏感信息如个人身份数据和财务信…

3 第一个 C 程序、程序编译过程、注释、printf 基本使用、代码块风格

目录 1 第一个 C 程序 1.1 需求说明 1.2 开发步骤 1.3 使用终端运行程序 1.4 程序代码分析 2 C 程序运行机制流程 2.1 编写 2.2 预处理 2.3 编译 2.4 汇编 2.5 链接 2.6 运行 2.7 gcc 步骤指令 3 C 程序开发注意事项 4 注释 4.1 什么是注释 4.2 注释的作用 4…

Java面试八股之什么是AMQP协议

什么是AMQP协议 AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c;高级消息队列协议&#xff09;是一个开放标准的应用层协议&#xff0c;旨在为消息中间件提供一种统一的、标准的通信方式。它允许消息在分布式系统中的应用程序之间进行可靠的、异步的传递。AMQ…

console调试

简介 浏览器的开发者工具为我们提供了强大的调试系统&#xff0c;可以用来查看DOM树结构、CSS样式调试、动画调试、JavaScript代码断点调试等。今天我们就来看看console调试的那些实用的调试技巧。 我们使用最多的就是console.log()了&#xff0c;当然多数情况下&#xff0c;…

0813,引用,函数重载,内存布局叭叭叭

是我4句话5个ERROR&#xff0c;阿巴阿巴 001_arrpointer.cc #include <iostream> using std::cout; using std::endl;void test(){int a[5]{1,2,3,4,5};int (*p)[5]&a;cout<<p<<endl;cout<<p1<<endl;int *pp(int*)(&a1);//第二个数组的…

vscode + cmake + ninja + ARMCC 配置stm32开发环境(构建篇)

vscode cmake ninja ARMCC 配置stm32开发环境&#xff08;构建篇&#xff09; 1. 前置环境 1.1 cmake安装 从CMake官网上下载CMake安装包进行安装CMake。CMake官网 安装完成之后&#xff0c;使用cmd查看cmake是否添加进入环境变量。 1.2 LLVM套件安装 从LLVM的github…

K8S上安装LongHorn(分布式块存储) --use

要在 Kubernetes上安装 LongHorn&#xff0c;您可以按照以下步骤进行操作&#xff1a; 一、准备工作 参考 官网教程将LongHorn只部署在k8s-worker5节点上。https://github.com/longhorn/longhorn 安装要求 Each node in the Kubernetes cluster where Longhorn is installe…

Java虚拟机:运行时内存结构

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 035 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

人口老龄化社区服务与管理平台

TOC springboot136人口老龄化社区服务与管理平台 系统概述 1.1 研究背景 人口老龄化社区服务与管理平台是面向居家老人用户、社区的系统与信息平台&#xff0c;并在此基础上提供实时、快捷、高效、低成本的&#xff0c;物联化、互联化、智能化的人口老龄化社区服务服务。 …