OpenCV教程——Mat对象

news/2025/2/21 9:15:14/

1.Mat对象和IplIamge对象

  • Mat对象是OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分为两个部分:头部数据部分
  • IplIamge是从2001年OpenCV发布之后就一直存在,是C语言风格的数据结构,需要开发者自己分配与管理内存、对大的程序使用它容易导致内存泄漏问题。

2.Mat对象构造函数

Mat对象有以下6种构建方法:

  1. Mat(int rows,int cols,int type)(常用)
  2. Mat(Size size,int type)(常用)
  3. Mat(int rows,int cols,int type,const Scalar &s)
  4. Mat(Size size,int type,const Scalar &s)
  5. Mat(int ndims,const int* sizes,int type)
  6. Mat(int ndims,const int* sizes,int type,const Scalar &s)

2.1.图像的其他构造方法

方法一:

img.create(size,type),但是.create不能赋值,赋值需要用img=Scalar(0,0,0)

方法二:

Mat::eye(3,3,type)构造一个3行3列(即3*3)的图像,并且对角线上每个像素点的第一个通道赋值为1,其余均为0,对如上语句,如果type为3通道图像的话,得到的图像数组矩阵见下:

类似的还有:

  • Mat::ones():每个像素的第一个通道为1,其余通道为0。
  • Mat::zeros():每个像素的每个通道都为0。

3.部分复制和完全复制

👉部分复制:一般情况下只会复制Mat对象的头和指针部分,不会复制数据部分。

👉完全复制:把Mat对象的头部和数据部分一起复制。

 
1
2
3
4
5
Mat A=imread(imgFilePath);
Mat B(A);//部分复制
Mat F=A.clone();//完全复制
Mat G;
A.copyTo(G);//完全复制

(部分复制:共用一个矩阵,即一张图,该图如果发生改变,A和B都将改变。而完全复制是各自用各自的数据部分,互不干扰。)

3.1.copyTo()

copyTo()有三种声明方式:

 
1
2
3
4
5
6
//1
Mat clone() const CV_NODISCARD;
//2
void copyTo( OutputArray m ) const;
//3
void copyTo( OutputArray m, InputArray mask ) const;

其中第三种方式还可用于图像融合,mask的尺寸必须和原图像相同,它的非零元素表示需要复制的矩阵元素,mask必须是CV_8U类型的,可以有1个或多个通道。例如:

 
1
src.copyTo(dst,mask);

如果mask在像素点(i,j)

的像素值不为0,则把src在像素点(i,j)的像素值直接赋给dst的(i,j)处;如果mask在像素点(i,j)的像素值为0,则dst保留其在(i,j)处的像素值。

 


http://www.ppmy.cn/news/66329.html

相关文章

[Data structure]双链表 | 一文带你了解线性数据结构之一的双链表

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:数据结构 双链表 1、简介2、常见操作3、时间复杂度4、代码实现思路总览5、Node6、DoubleLinkedList6.1、添加节点…

《设计模式》访问者模式

《设计模式》访问者模式 定义: 访问者模式用于封装一些作用于某种数据结构中的各元素的操作,将数据结构和数据操作分离,它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。属于行为型模式。 访问模式的角色组成: …

java程序员容易被人误解?我来聊聊常见的三种情况

先说一下个人情况吧。21年来到深圳,现在马上工作满两年。我说程序员是一个容易被人误解的职业呢,可能在大部分人的印象里,程序员就是一个呆板、穿着格子衫、戴着厚厚的眼镜片、比较呆滞的一群人。其实这个印象可能是符合上个年代吧——程序员…

不同应用场景瑞芯微RK3568主板方案定制

随着物联网和智能设备的迅猛发展,瑞芯微RK3568主板方案作为一种高性能的系统System-on-a-chip(SoC),已经成为嵌入式系统、智能家居设备和工业自动化设备等应用场景的首选方案。定制瑞芯微RK3568主板方案可以满足不同应用场景的需求…

Playground AI:免费绘画图像创作工具

【产品介绍】 Playground AI是一个免费的在线 AI绘画 图像创作工具。你可以用它来创作艺术作品、社交媒体帖子、演示文稿、海报、视频、logo 等等。 Playground AI 的核心技术是基于深度学习的图像生成模型,它可以根据你的输入文字或图片,自动合成出高质…

MD-MTSP:孔雀优化算法POA求解多仓库多旅行商问题(提供MATLAB代码,可以修改旅行商个数及起点)

一、多仓库多旅行商问题 多旅行商问题(Multiple Traveling Salesman Problem, MTSP)是著名的旅行商问题(Traveling Salesman Problem, TSP)的延伸,多旅行商问题定义为:给定一个𝑛座城市的城市集…

安卓屏幕适配那些事情面试,一篇全部搞定

安卓屏幕适配那些事情面试,一篇全部搞定 零.弄懂px/ dp /dpi /屏幕分辨率/尺寸,屏幕适配的原理一.autolayout二.autosize今日头条三.smallestWidth 限定符screenMatch 零.弄懂px/ dp /dpi /屏幕分辨率/尺寸,屏幕适配的原理 https://blog.csd…

社交媒体中的“点赞”“喜欢”是如何存储在数据库中的?

你有没有想过 Instagram、Twitter、Facebook 或任何社交媒体平台如何跟踪谁喜欢你的帖子?让我们在这篇文章中弄清楚! 1:序言 最近,我受邀在一个名为“CityJS”的活动中发言。但问题在于:我是 PHP 开发人员。我根本不懂…