OpenCv (正式篇)6----core组件--Mat(最基本的图像数据类型)

本文介绍OpenCV的历史背景及Mat类的基础概念,包括其内存管理方式、数据结构组成和复制机制。针对不同场景下Mat对象的复制进行了详细解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为是新手刚刚接触opencv,所以并没有Mat之前版本的opencv的开发经验,按照资料上的情况来说,opencv最开始是基于C语言的开源视觉库。在之前的版本是用lplImage来作为图像存储,,这个就涉及内存管理
。这是前话,反正我现在也不用了~

  1. opencv函数中输出图像的内存分配是自动完成的(总之不需要手动分配内存)
  2. 使用opencv的C++的接口时不需要考虑内存分配的问题
  3. 3.

Mat数据类型

我是接触java之后来学Mat的,所以一看见这种的定义格式就知道是类(class)/* 类似于String类*/ ,
反正我就当做opencv底层的数据操作的基本数据类型。

Mat 构成:

  1. 指向图像的信息(矩阵内容)的指针 content
  2. 信息头(矩阵大小,存储地址,存储方式)feature

Mat的引用的复制问题:

A/*复制的第一种情况*/
Mat A;//
Mat B(A);//
Mat C=A;
B/*复制的第二种情况*/
Mat a;
a.copyTo(Mat b);
Mat c=a.clone();

现在来分析:
A:只复制了信息头的内容
B : 更像克隆clone。全都复制过去。

`

### 如何在 Windows 系统中安装 OpenCV C++ 开发环境 #### 准备工作 为了成功配置 OpenCV 的开发环境,需要完成以下几个主要部分的工作:下载并解压 OpenCV 库文件、安装 Visual Studio 或其他支持的 IDE,并正确设置编译器和链接库路径。 --- #### 下载 OpenCV 源码或预构建包 可以从官方网站获取 OpenCV 的源代码或者已经预先编译好的二进制包。访问官网地址 https://opencv.org/releases/ ,选择适合的操作系统版本进行下载[^3]。对于初学者来说,推荐直接下载已编译好的 `.exe` 文件来简化安装过程。 如果希望自定义功能模块,则可以选择源码形式并通过 CMake 工具自行生成项目所需的解决方案文件后再编译得到终动态链接库(DLLs)以及静态库(static libraries)[^1]。 --- #### 安装 Microsoft Visual Studio Microsoft 提供的强大集成开发环境——Visual Studio 是常用的工具之一用于编写基于C/C++的应用程序。建议至少安装 Community 版本因为它免费提供给个人开发者使用而且包含了创建高性能图像处理应用程序所需的一切组件。 当执行 VS Installer 时,请确保勾选以下选项: - **Desktop development with C++**: 这一 workload 将会自动拉取必要的 SDK 和工具链以便后续操作顺利开展。 完成后启动该软件进入下一步骤即配置头文件与库位置信息等工作流程之中[^4]。 --- #### 配置环境变量 为了让操作系统能够识别 opencv.dll 所处的位置从而实现运行期间加载共享对象的功能,需将 bin 路径加入系统的 PATH 中去: 假设你把整个压缩包解压到了 `D:\Program Files\opencv`,那么应该添加如下字符串至全局环境变量里: ``` D:\Program Files\opencv\build\x64\vc15\bin\ ``` 注意这里具体子目录名称可能依据实际安装情况有所差异比如 vcversion 号码等都会影响后确切表述方式[^2]. --- #### 测试简单示例验证安装成果 下面给出一段简单的测试代码用来确认当前环境下能否正常调用 open cv 功能接口: ```cpp #include <iostream> #include <opencv2/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp> int main() { std::string image_path = samples::findFile("lena.jpg"); cv::Mat img = cv::imread(image_path); if(img.empty()){ std::cerr << "Cannot load image!" << std::endl; return -1; } cv::imshow("Display window",img); // 显示图片窗口 int k = cv::waitKey(); // 等待按键输入 if(k == 's') // 如果按下了's'键则保存这张图 cv:: imwrite("savedImage.png",img); return 0 ; } ``` 上述例子尝试读入一幅名为 lena.jpg 的位图数据结构体 Mat 类型存储起来之后显示出来让用户查看效果同时允许通过键盘交互决定是否另存新副本。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值