OpenCV快速入门七:Mat详解

这篇具有很好参考价值的文章主要介绍了OpenCV快速入门七:Mat详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 :Mat简介

一切图像皆Mat:
Mat是一个类,由矩阵头——说明书(尺寸、存储方法、存储地址、引用次数)和指向存储所有像素值的矩阵指针构成。

Mat {
public:
---
int    dims;      //维数
int    rows,cols; //行列数
uchar  *data;     //存储数据的指针
int    *refcount; //引用计数
}

1.Mat基本结构

OpenCV快速入门七:Mat详解

二:Mat的构建

以C++为例

1.构造法

Mat::Mat(Size size,int type,const Sclar&s)//将所有元素初始化值为s

也可用ones,zeros,创建空白图像:

Mat m0 = Mat::zeros(img.size,img.type);
Mat mz=Mat::zeros(SIze(w,h),CV_8UC1);

但三通道使用ones只赋值第一个通道,要全部赋值可用Scalar(B,G,R)

2.克隆

Mat m1 = img.clone();

3.复制

Mat m2;
img.copyTo(m2);

4.直接赋值法–矩阵小

Mat r8=(Mat_<double>(3,3)<<1,2,3,4,5,6,7,8,9);

输出

[1,2,3;
4,5,6;
7,8,9;]

5.数组法—数据量大

int a[2][3]={1,2,3,4,5,6};//2行3列
Mat ma(2,3,CV_32s,a);

6.create

Mat m3;
m3.creat(4,4,CV_8UVC1);//数据为乱值

[25,25,25,25;
25,25,25,25;
25,25,25,25;
25,25,25,25;
]

三:Mat拷贝

OpenCV快速入门七:Mat详解

拷贝构造或赋值时,只是新创建了不同的信息头和矩阵指针,但共享一个矩阵
• 赋值运算符和复制构造函数 (构造函数)只复制头。
• 使用clone () 或copyTo () 函数将复制的图像的基础矩阵。

clone深拷贝申请新的空间dst 和src完全独立
copyto是否申请新的空间,取决于dst的矩阵头中的大小信息与src的一致,一致则不申请,否则先申请新的空间再拷贝,类型必须是CV_8U

1:浅拷贝

Mat B(A);

2:深拷贝

clone();
copyTo();
copy();

img为原图,img2为深拷贝,img3为浅拷贝
OpenCV快速入门七:Mat详解

四:图像(Mat)的多种属性

OpenCV快速入门七:Mat详解

import cv2
import numpy as np
img = cv2.imread(r'C:\Users\DMr\Pictures\Saved Pictures\gary.jpg')

#shape属性中包括了三个信息
#高度,长度 和 通道数
print(img.shape)

#图像占用多大空间
#高度 * 长度 * 通道数
print(img.size)

#图像中每个元素的位深
print(img.dtype)

输出
OpenCV快速入门七:Mat详解

五:通道分离合并

1.相关api

split(mat)            #mat:要分离的图像
merge((ch1,ch2----))  #ch:要合并的通道

具体作用可以参考我的OpenCV学习四:TrackBar控件(滑动条)

2.代码演示

import cv2
import numpy as np

img = np.zeros((480, 640, 3), np.uint8)#全黑画布

b,g,r = cv2.split(img)#图像分割

b[10:100, 10:100] = 255#roi---白色
g[10:100, 10:100] = 255

img2 = cv2.merge((b, g, r))#合并

cv2.imshow('img', img)
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('img2', img2)

cv2.waitKey(0)

输出
OpenCV快速入门七:Mat详解

每日“大饼” :
你要自己发光 而不是总是折射别人的光芒文章来源地址https://www.toymoban.com/news/detail-447929.html

到了这里,关于OpenCV快速入门七:Mat详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV从入门到精通(一) ——OpenCV简介、模块、常用函数、图像视频读取显示保存

    说明:关于OpenCV的教程和书籍已经很多了,所以,我不想重复别人已经做过的事情。如何系统全面的掌握OpenCV?我想这是每个学习OpenCV的人都想要做到的事情。说到底,OpenCV只是一个数字图像处理函数库,要全面掌握OpenCV的使用,只需要明白有哪些函数,每个函数怎么使用。

    2024年02月07日
    浏览(57)
  • OpenCV快速入门:图像形态学操作

    图像形态学是一门强大而有趣的技术,它通过对图像进行形态学操作,使图像更适合后续处理步骤。在本文中,我们将深入探讨OpenCV中的图像形态学操作,快速入门这一关键领域。 图像形态学作为数字图像处理的一个分支,致力于通过形态学操作实现对图像特征的提取、噪音

    2024年02月05日
    浏览(99)
  • opencv Mat详解

    我们有多种方法从现实世界获取数字图像:数码相机、扫描仪、计算机断层扫描和磁共振成像等。在任何情况下,人类看到的都是图像。当将其转换为数字图像在设备中进行存储时,我们记录的是图像中每个点的数值。 例如,在上面的图像中,可以看到汽车的镜子只是一个包

    2024年02月07日
    浏览(38)
  • OpenCV Mat实例详解 一

              OpenCV中的Mat是一个类,它用存储图像信息。由两部分数据组成:矩阵头和像素值矩阵。矩阵头包含矩阵尺寸、存储方法、存储地址等信息,而像素值矩阵则存储实际的像素值数据。         Mat类在OpenCV中有十分重要的作用,图像信息的载入、保存、传递都离不

    2024年02月19日
    浏览(38)
  • OpenCV Mat实例详解 四

            OpenCV Mat实例详解三中详细介绍来了OpenCV Mat类的公有静态成员函数,下面介绍OpenCV Mat类的其他常用成员函数。          Mat  adjustROI (int dtop, int dbottom, int dleft, int dright);         dtop ROI 上边界移动值,如果为正,上边界向上移动,如果值为负,则向下

    2024年02月21日
    浏览(38)
  • OpenCV Mat实例详解 三

            OpenCV Mat实例详解 一、二介绍了,OpenCV Mat类构造函数及其公共属性。下面继续介绍OpenCV Mat类公有静态成员函数         static CV_NODISCARD_STD Mat    diag (const Mat d);         该函数用已有的Mat对象的数据矩阵对角线上的数据填充新创建Mat对象数据矩阵。

    2024年03月14日
    浏览(33)
  • C# - Opencv应用(2) 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值]

    C# - Opencv应用(2) 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值] 矩阵创建 图像显示与保存 像素读取与赋值 新建sample02项目,配置opencv4相关包,新建 .cs 进行测试 两种常用的图像遍历方式 灰度图操作 三通道图操作 完整代码

    2024年02月03日
    浏览(48)
  • Opencv C++图像处理:矩阵Mat + 随机数RNG + 计算耗时 + 鼠标事件

    数据类型 字节数 取值范围 bool型(布尔型) 1 [0 or 1] BOOL型(int型) 4 [TRUE or FALSE] sbyte型(有符号8位整数) 1 [128 ~ 127] bytet型(无符号8位整数) 8U 2 [0 ~ 255] short型(有符号16位整数) 16S 2 [-32,768 ~ 32,767] ushort型(无符号16位整数) 16U 2 [0 ~ 65,535] int型(有符号32位整数) 32S 4 [

    2024年02月03日
    浏览(56)
  • Baumer工业相机堡盟相机BGAPI SDK联合OpenCV进行Mat图像转换(C#)

    Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。   Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可

    2024年02月09日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包