OpenCV2.3+:vector和Mat的基本操作与转换
需积分: 9 94 浏览量
更新于2024-08-22
收藏 46KB PPT 举报
"这篇文档介绍了OpenCV 2.3.4版本中关于`vector`和`Mat`的基础知识,特别是`Mat`类在OpenCV 2.0之后面向对象的特性变化,以及如何进行有效操作。同时提到了与其他OpenCV数据结构的关系,如`IplImage`、`CvRect`等,并讲解了`Mat`对象的赋值、属性访问、重塑和类型转换方法。此外,还提及了与`vector`的交互以及一些额外的操作函数,如排序、计算样本均值等。"
在OpenCV 2.3.4及更高版本中,库的核心数据结构`Mat`采用了面向对象的设计,相比早期的`IplImage`,提供了更方便的内存管理和操作。`Mat`对象可以表示多维数组,常用于图像处理。在C++中,`Mat`类提供了丰富的成员函数来访问和操作其内部数据。
当需要从`vector`转换到`Mat`或反之时,可以通过`getMat()`函数实现。然而,推荐直接操作单个像素,以避免可能出现的错误。文档中提到,`lda.cpp`包含了一些OpenCV未公开的辅助操作函数,如对`Mat`对象进行排序、计算样本总均值和类均值等。
`Mat`的赋值通常是引用赋值,这意味着修改`Mat`的一个副本也会改变原始对象。例如,`Mat img(image)`会将`image`的引用赋给`img`。若不想引用赋值,可以使用`copyTo()`函数或者乘以1(`Mat image=img*1`)。对于`Mat`的行或列操作,如`img.row(n)=image.row(n)`,这里并未进行真正的赋值,需要加上`*1`以进行复制。
`Mat`的重塑(reshape)操作仅适用于连续的数据,即数据存储在一块连续的内存区域。如果`Mat`不连续,可以创建新的`Mat`并使用`copyTo()`函数复制数据。值得注意的是,`reshape`操作要求每一行的数据长度是4字节的倍数,否则可能会出现问题。
`Mat`的创建允许指定各种类型,如`CV_64F`表示`double`类型的数据。访问`Mat`中的像素值,可以使用`at<type>(i, j)`,其中`type`与`Mat`的类型匹配。`convertTo()`函数可用于改变`Mat`的类型。
此外,`Mat`支持矩阵运算,例如`img=image*img`,实现了矩阵乘法。OpenCV 2.0以后,许多旧的`cv`开头的函数被新类的成员函数替代,简化了代码并减少了指针管理的复杂性。通过熟悉这些基础操作,开发者可以更高效地利用OpenCV进行图像处理和计算机视觉任务。
2011-11-29 上传
2021-11-14 上传
点击了解资源详情
2012-11-04 上传
2016-01-22 上传
131 浏览量
点击了解资源详情
点击了解资源详情
xxxibb
- 粉丝: 19
- 资源: 2万+
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载