苏州企业网站建设设计/酒店营销推广方案
1.opencv
1.1Mat容器:
在OpenCV中,cv::Mat
是一个重要的类,用于表示和操作矩阵或多维数组,通常用于图像处理和计算机视觉任务。
cv::Mat
类具有以下特点和功能:
-
多维数据存储:
cv::Mat
可以存储多维数据,包括图像、矩阵、向量等。它是一个灵活的数据容器,可以存储不同类型和大小的数据。 -
数据访问和操作:
cv::Mat
提供了各种方法来访问和操作数据。你可以使用下标运算符()
访问和修改单个元素,也可以使用迭代器遍历矩阵中的所有元素。此外,还有一些便捷的函数和运算符可用于常见的矩阵操作,如转置、缩放、裁剪等。 -
数据类型和通道:
cv::Mat
支持不同的数据类型,如整数、浮点数和复数。它还可以存储多通道数据,例如彩色图像的三通道(BGR 或 RGB)表示。 -
内存管理:
cv::Mat
使用智能指针技术,自动管理底层数据的内存。它可以自动分配和释放内存,使得内存管理变得更加方便和安全。 -
与其他数据结构的互操作性:
cv::Mat
可以与其他数据结构进行互操作。它可以与标准C++数组、STL容器以及其他OpenCV数据结构(如cv::Point
和cv::Rect
)进行无缝集成。
Mat基本上是一个具有两个数据部分的类:①矩阵头:大小,存储的方法,地址等 ;②矩阵指针:指向实际数据存储区域的指针;
Mat对象都有自己的头部,但通过使他们的指针指向相同的地址,矩阵可以在他们两个实例中共享。
Mat A, C; // 创建两个MAT容器的对象头
A = imread(argv[1], IMREAD_COLOR); // 为A对象添加实际的矩阵数据,imread() 返回的就是一个Mat对象。
Mat B(A); // 使用拷贝构造函数创建Mat对象B
C = A; // 修改操作
上述的所有对象,最后指向相同的数据矩阵,但它们拥有自己的头部;使用它们中的任何一个对象修改矩阵都会影响其他的对象。
可以询问矩阵本身是否属于多个Mat对象,它们在不再需要时负责清理它。
这是通过使用引用计数机制来处理的。每当有人复制Mat对象的标题时,矩阵的计数器就会增加。每当头部被清洁时,这个计数器就会减少。当计数器达到零时,矩阵也被释放。有时你也想复制矩阵本身,所以OpenCV提供了cv :: Mat :: clone()和cv :: Mat :: copyTo()函数。
Mat F = A.clone(); //F和A将不会采用同一个引用计数系统
Mat G;
A.copyTo(G); // 现在修改F和G都不会影响A
1.2 imread()函数
imread()
函数返回一个cv::Mat
对象,表示读取的图像数据。
cv::Mat cv::imread(const std::string& filename, int flags = cv::IMREAD_COLOR);
filename:要读取的图像文件的路径和名称。
flags:可选参数,用于指定图像的读取方式。默认为cv::IMREAD_COLOR,表示以彩色方式读取图像。
以下是flags参数的可选值:cv::IMREAD_COLOR:以彩色方式读取图像,忽略图像的透明度通道(默认)。cv::IMREAD_GRAYSCALE:以灰度方式读取图像,将图像转换为单通道灰度图像。cv::IMREAD_UNCHANGED:以原始方式读取图像,包括图像的通道和透明度通道。
1.3 imshow()函数
imshow()
函数将指定的图像数据显示在一个窗口中。窗口的大小会自动根据图像的大小进行调整。如果窗口不存在,则会创建一个新窗口并显示图像;如果窗口已存在,则会更新窗口中显示的图像。
void cv::imshow(const std::string& winname, cv::InputArray mat);
winname:窗口的名称,用于标识不同的窗口。
mat:要显示的图像数据,可以是cv::Mat对象或其他支持的图像数据类型。
1.4 cvtcolor()函数
cvtColor()
是OpenCV库中用于图像颜色空间转换的函数。它可以将图像从一个颜色空间转换为另一个颜色空间
void cv::cvtColor(cv::InputArray src, cv::OutputArray dst, int code, int dstCn = 0);
src:输入图像的数据,可以是cv::Mat对象或其他支持的图像数据类型。
dst:输出图像的数据,用于存储转换后的图像数据,可以是cv::Mat对象或其他支持的图像数据类型。
code:颜色空间转换的代码,用于指定源图像和目标图像的颜色空间。具体的转换代码由OpenCV提供,如cv::COLOR_BGR2GRAY表示将BGR图像转换为灰度图像。
dstCn:可选参数,表示目标图像的通道数。默认为0,表示目标图像的通道数与源图像的通道数相同。
1.5 resize()函数
void cv::resize(cv::InputArray src, cv::OutputArray dst, cv::Size dsize, double fx = 0, double fy = 0, int interpolation = cv::INTER_LINEAR);
src:输入图像的数据,可以是cv::Mat对象或其他支持的图像数据类型。
dst:输出图像的数据,用于存储调整大小后的图像数据,可以是cv::Mat对象或其他支持的图像数据类型。
dsize:目标图像的尺寸,用cv::Size(width, height)指定。
fx:可选参数,水平方向的缩放比例因子。默认为0,表示根据目标图像的宽度自动计算缩放比例。
fy:可选参数,垂直方向的缩放比例因子。默认为0,表示根据目标图像的高度自动计算缩放比例。
interpolation:可选参数,用于指定插值方法。默认为cv::INTER_LINEAR,表示使用双线性插值进行图像的缩放。
1.6 puttext()函数
void cv::putText(cv::InputOutputArray img, const std::string& text, cv::Point org, int fontFace, double fontScale, cv::Scalar color, int thickness = 1, int lineType = cv::LINE_8, bool bottomLeftOrigin = false);
2.Cmake
2.1 简介
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件;Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用;CMake 的组态档取名为 CMakeLists.txt;
2.2 vscode使用CMake
①下载CMake:
Download CMake
②系统环境配置好:
根据cmake的安装位置去添加,可以在cmd中,测试是否成功。
③安装两个插件:
确保你的vscode本来就是可以跑的,可以上网搜一下vscode环境配置
④创建文件夹:
src:存放源文件;inc:存放头文件;build:执行cmake会生成一些配置文件比较杂,放在该目录下;bin:存放生成的可执行程序;CmakeLists.txt文件;
⑤编写一个简单的OpenCV示例代码(.cpp):
#include <iostream>
#include <opencv2/opencv.hpp> // 包含opencv的库头文件using namespace std;
using namespace cv; //使用命名空间cv,包含空间中方法及属性int main(int argc, char** argv )
{if ( argc != 2 ) // 命令行参数个数不是2个的时候{printf("使用指令: DisplayImage <Image_Path>\n"); // 提示:按照固定格式输入指定内容!return -1;}Mat img; //创建一个名称为img的图像容器(这个后边会介绍到)img = imread( argv[1], 1 ); //为该容器读取命令行中 DisplayImage 之后的参数(图片路径“<Image_Path>”)if ( !img.data ) //如果读取数据为空(没有读取到图片){cout<<"没有图片数据!"<<endl;return -1;}namedWindow("检索到的图片", WINDOW_AUTOSIZE );//创建图片显示窗口imshow("Display Image", img);//显示图片waitKey(0); //延迟等待return 0;
}
⑥编写CMakeList.txt:
# 选择最匹配的最低的Cmake版本
cmake_minimum_required(VERSION 2.8)
# 创建的程序的名称(项目的名称)
project( DisplayImage )
#指定头文件的路径,PROJECT_SOURCE_DIR宏对应的值是工程的根目录
include_directories(${PROJECT_SOURCE_DIR}/inc)
find_package( OpenCV REQUIRED ) # 找到需求的库或者组件
#[[aux_source_directory(< dir > < variable >)dir:要搜索的目录variable:将从dir目录下搜索到的源文件列表存储到该变量中
]]
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRCS)
#设置可执行程序路径,EXECUTABLE_OUTPUT_PATH是可执行路径的宏
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#生成可执行程序 add_executable(可执行程序名 源文件名称)
add_executable( DisplayImage ${SRCS})
#链接的库
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
⑦生成可执行文件:
进入build目录下敲击以下命令表示cmake指定MinGW编译生成makefile
cd <DisplayImage_directory> /bulid/ # 切换到项目路径bulid当中
cmake .. -G "MinGW Makefiles" # 编译当前项目
ming32-make # 生成可执行文件(名称为Cmake文件中的project()中的名称)
ps另一种方法:
在setting中加这一句:
在vscode中可以使用ctrl+shift+p,搜索CMake:Configure
点击效果如下
生成了makefile之后,在终端make生成可执行文件
⑧执行程序:
cd ../bin/ #跳转到可执行文件的目录
./DisplayImage xxx.jpg #添加要显示的图片(图片路径),并且执行
相关文章:

vscode + CMake编译(opencv显示图片工程)
1.opencv 1.1Mat容器: 在OpenCV中,cv::Mat是一个重要的类,用于表示和操作矩阵或多维数组,通常用于图像处理和计算机视觉任务。 cv::Mat类具有以下特点和功能: 多维数据存储:cv::Mat可以存储多维数据&…...

JavaScript的学习之强制类型转换
目录 一、什么是强制类型转换 二、其他类型转化为String类型 方式一:调用被转化数据类型的toString()方法 方式二:调用String函数,并将我们要转换的数据添加进去为参数 三、其他类型转化为Number类型 方式一:使用Number()函数…...

天润融通:AI赋能客户体验,推动企业收入和业绩增长
“客户体验已经成为全球企业差异化的关键。人工智能与数据分析等创新技术正在加速推动企业在客户体验计划中取得成功,以保持领先地位”。Customer Insights & Analysis 研究经理Craig Simpson说道。 客户体验 (CX,Customer Experience) 是客户在与企…...

Android与服务器交互的方式中的对称加密和非对称加密(kotlin)
Android与服务器交互中的对称加密和非对称加密(kotlin) 引言 在 Android 与服务器交互时,我们常常需要进行数据传输,为了保证数据的安全性,我们可以使用加密算法来保护数据。在本文中,我们将介绍如何在 K…...

epoch和batch的区别
在机器学习和深度学习中,“epoch”(批次)和"batch"(批量)是两个重要的概念,它们分别表示训练过程中的不同阶段和数据处理方式。 Epoch(批次) 定义:Epoch&…...

非递归创建二叉查找树
非递归创建二叉查找树代码。 #include <stdio.h> #include <stdlib.h>typedef int KeyType; typedef struct BSTNode{KeyType key;struct BSTNode *lchild,*rchild; }BSTNode,*BiTree;//王道书上的递归写法,代码简单,但是理解有难度 //int …...

摄影师危!AI绘画即将降维打击摄影行业
你还以为AI绘画影响的只是插画师行业吗?错了,摄影行业也即将面临技术洗牌 话不多说,先看一下这几张图 你能一眼看出这是AI画的迪丽热巴吗? 你是不是还以为AI绘画只能画点动漫艺术风格?那你就低估了AI的发展速度&…...

ts 中class
class obj{name:stringage:numberconstructor(name:string,age:number){this.name namethis.age age}setname(){this.name 111 } } //新建实例 //构造方法中的this指向调用者,谁new就指向谁 //这个this 指向 o,打印this,可以获取到o身上的…...

深度解析RocketMq源码-高可用存储组件(四)Dledger框架日志同步流程
1.绪论 在深度解析RocketMq源码-高可用存储组件(一) raft协议详解-CSDN博客 中讲过,raft协议中,日志同步主要有两个地方,一个是leader会跟follower同步数据,另一个是在新leader诞生的时候,会与…...

ONLYOFFICE 文档开发者版 8.1:API 更新
随着版本 8.1 新功能的发布,我们更新了编辑器、文档生成器和插件的 API,并添加了 Office API 板块。阅读下文了解详情。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一个功能强大的文档编辑器,支持处理文本文档、电子表格、演示文稿、可填写…...

Activemq单节点在Windows下的配置部署
1.环境信息 服务器信息jdk版本activemq版本备注Windows Server 2008R2 Enterprisejdk-17_windows-x64_bin.exeapache-activemq-5.18.42.jdk配置 1.下载jdk 地址: Java Downloads | Oracle 中国 2.上传至Windows服务器,点击安装,在选择安装目录页面,选择合适的安装目录即…...

SpringBoot-注解@ImportResource引入自定义spring的配置xml文件和配置类
1、注解ImportResource 我们知道Spring的配置文件是可以有很多个的,我们在web.xml中如下配置就可以引入它们: SprongBoot默认已经给我们配置好了Spring,它的内部相当于已经有一个配置文件,那么我们想要添加新的配置文件怎么办&am…...

GitLab配置免密登录之后仍然需要Git登录的解决办法
GitLab配置免密登录之后仍然需要Git登录的解决办法 因为实习工作需要,要在本地拉取gitlab上的代码,设置了密钥之后连接的时候还需要登录的token,摸索之后有了下面的解决办法。 方法一: 根据报错的提示,去网站上设置个人…...

探索小众爱好:打造个人韧性与特色之路
在这个信息爆炸的时代,我们很容易陷入“千篇一律”的漩涡中,无论是生活方式还是兴趣爱好,似乎都趋向于某种“流行”或“热门”。然而,真正的个性与魅力,往往来源于那些不为大众所知的小众爱好。今天,我想和…...

GitHub使用教程(小白版)
看一百篇文章不如自己写一篇 第一步:注册和安装 注册GitHub账号 访问 GitHub官网。点击右上角的 "Sign up" 按钮。按照提示输入你的邮箱、创建用户名和密码,完成注册。 安装Git 访问 Git官网。下载并安装适用于你操作系统的Git。安装…...

深度解析SD-WAN在企业组网中的应用场景
在现代企业快速发展的网络环境中,SD-WAN技术不仅是实现企业各站点间高效连接的关键,也是满足不同站点对互联网、SaaS云应用和公有云等多种业务需求的理想选择。本文将从企业的WAN业务需求出发,对SD-WAN的组网场景进行全面解析,涵盖…...

【INTEL(ALTERA)】Eclipse Nios II SBT 无法从模板创建新应用程序和 BSP
目录 说明 解决方法 说明 您应该能够创建新的应用程序和 BSP 模板包含以下步骤: 选择 Nios II应用程序和 BSP 来自模板。选择您的.sopcinfo 文件并选择模板。从您的工作区单击 选择现有的 BSP 项目。单击 创建。选择所需的 BSP 选项。单击 完成。 但是…...

Vue_cli搭建过程项目创建
概述 vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板;预先定义 好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个 骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速&am…...

面试题4:POST 比 GET 安全?
不是。HTTP就没有加密功能。 我们知道 GET一般将参数放到URL的查询字符串中,如果是实现登录页面,我们的用户名和密码就直接显示到浏览器的地址栏中了,此时就会轻易的被他人获取账号密码,很不安全。而POST会把参数放到 body 里&am…...

Github生成Personal access tokens及在git中使用
目录 生成Token 使用Token-手工修改 使用Token-自动 生成Token 登录GitHub,在GitHub右上角点击个人资料头像,点击Settings → Developer Settings → Personal access tokens (classic)。 在界面上选择点击【Generate new token】,填写如…...

【BUG记录】条件查询没有查询结果 || MybatisPlus打印查询语句
结论 先说结论,查询没有结果,可能是数据库连接,数据问题之类,最有可能的根本原因是查询语句问题,需要想办法检查查询语句,使用mybatisPlus等自动生成查询语句的框架不能直接看语句,可以依靠日志…...

【C#】找不到属性集方法。get只读属性用了反射设置setValue肯定报错
欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 背景 找不到属性集方法。get只读属性用了反射设置setValue肯定报错 报错…...

探索ChatGPT在程序员日常工作的多种应用
引言 在现代科技迅猛发展的今天,人工智能的应用已经深入到我们生活和工作的各个方面。作为程序员,我们时常面临大量繁杂的任务,从代码编写、错误调试到项目管理和团队协作,每一项都需要花费大量的时间和精力。近年来,…...

算法与数据结构——时间复杂度详解与示例(C#,C++)
文章目录 1. 算法与数据结构概述2. 时间复杂度基本概念3. 时间复杂度分析方法4. 不同数据结构的时间复杂度示例5. 如何通过算法优化来提高时间复杂度6. C#中的时间复杂度示例7. 总结 算法与数据结构是计算机科学的核心,它们共同决定了程序的性能和效率。在实际开发中…...

面试题3:GET 和 POST 有什么区别?
[!]高频面试题。 GET 和 POST 没有本质区别,可以进行相互代替。 1、GET语义:“从服务器获取数据”;POST语义:“往服务器上提交数据”。[设计初衷,不一定要遵守] 2、发请求时,给服务器传递的数据ÿ…...

探索QCS6490目标检测AI应用开发(三):模型推理
作为《探索QCS6490目标检测AI应用开发》文章,紧接上一期,我们介绍如何在应用程序中介绍如何使用解码后的视频帧结合Yolov8n模型推理。 高通 Qualcomm AI Engine Direct 是一套能够针对高通AI应用加速的软件SDK,更多的内容可以访问:…...

C# 静态类中构造、字段和属性等的执行顺序,含有单例模式分析
C# 静态类时我们实战项目开发中用的非常多的。有些时候可能他的执行顺序并非如我们认为的那样,那就快速来看一下吧! 在C#中,静态类的构造函数是在第一次访问该类的任何成员时执行的。静态构造函数是不可继承的,并且在访问静态类的…...

c++设计模式之一创建型模式
1、创建型模式(常见的设计模式) Factory 模式(工厂模式,被实例化的子类) 在面向对象系统设计中经常可以遇到以下的两类问题: 下面是第一类问题和代码示例:我们经常会抽象出一些类的公共接口以…...

上古世纪台服注册账号+下载客户端全方位图文教程
又一款新的MMRPG游戏即将上线啦,游戏名称叫做《上古世纪》游戏采用传统MMO类型游戏的玩法,但是开发商采用了先进的游戏引擎,让玩家们可以享受到极致的视觉体验。同时游戏的背景是建立在大陆分崩离析的基础上。各个部落因为领地的原因纷纷开战…...

【Android】Android中继承Activity、Application和AppCompatActivity的区别
在 Android 开发中,Activity、Application 和 AppCompatActivity 是三个重要的类,它们各自有不同的作用和用途: 1. Activity Activity 是 Android 应用中的一个核心组件,代表了用户界面上的一个单一屏幕或交互界面。每个 Activi…...