首页 > 其他分享 >图像与Mat

图像与Mat

时间:2024-06-14 19:58:36浏览次数:15  
标签:Mat 8UC3 矩阵 Range 图像 CV

1 数字图像是以像素(pixel)为基本元素的、可以用数字计算机或数字电路存储和处理的图像。通常的二维数字图像是一个矩型,可以用一个二维数组f(x,y)来表示,其中x,y是二维空间中的某坐标系的坐标,f(x,y)表示图像在该点处的灰度值等性质。 2 把白色与黑色之间按对数关系分为若干等级,称为灰度,灰度分为256阶,8位二进制数表示。 3 openCV图像的坐标

彩色图像与灰色图像

Mat类是Opencv中储存图像常见的一种数据结构。Mat类可以看做是存放矩阵的容器,他包含了两部分,分别是用来存放图片信息的信息头,和一个指向图片储存矩阵的指针。

常用成员及含义

1、data: Mat对象中的一个指针,指向存放矩阵数据的内存(uchar* data)

2、dims: 矩阵的维度,3*4的矩阵维度为2维,3*4*5的矩阵维度为3维

3、channels: 矩阵通道,矩阵中的每一个矩阵元素拥有的值的个数,比如 channels = 3。常见的是一张彩色图片有红、绿、蓝三个通道。

4、depth: 深度,即每一个像素的位数,也就是每个通道的位数。在opencv的Mat.depth()中得到的是一个0 – 6的数字,分别代表不同的位数:enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 },可见 0和1都代表8位, 2和3都代表16位,4和5代表32位,6代表64位

Mat的创建和构造: CV_8UC3:8位;U无符号;C3三通道。

方法一: 通过读入一张图像,直接转换为Mat对象 Mat image = imread("test.jpg");

方法二: 使用无参数构造函数,创建Mat对象 Mat image = Mat(); image.create(4, 4, CV_8UC3);

方法三: 使用行、列、类型带这个三个参数的构造函数创建Mat对象 Mat m = Mat(4, 4, CV_8UC3)

方法四: 使用行、列、类型、Scalar向量四个参数的构造函数创建Mat对象 Mat m = Mat(4, 4, CV_8UC3, Scalar(0, 255, 255);

方法五: 使用大小、类型两个参数的构造函数创建Mat对象 Mat m = Mat(Size(4, 4), CV_8UC3);

方法六: 使用大小、类型、Scalar向量三个参数的构造函数创建Mat对象 Mat m = Mat(Size(4, 4), CV_8UC3, Scalar(255, 0, 0));

方法七: 使用Mat::zeros函数实现,两个参数一个是Size表示图像宽与高 另外一个表示类型: Mat m = Mat::zeros(Size(4,4), CV_8UC3);

方法八: 使用Mat::ones函数实现,两个参数一个是Size表示图像宽与高, 另外一个表示类型 Mat m = Mat::ones(Size(4,4), CV_8UC1);

方法九:利用已有矩阵构造 Mat image = imread("test.jpg"); Mat imageNew( image );

方法十:如果需要构造的矩阵尺寸比已有矩阵小,并且存储的是已有矩阵的子内容 cv::Mat::Mat(const Mat & m,  const Range   & rowRange,  const Range & colRange = Range::all()) Mat image = imread("test.jpg"); Mat imageNew( image , Range(1,3),Range(3,6));

图像的ROI区域

1 Rect Mat im1 = im2(Rect(x,y,width,height));

2 Range Mat im1 = im2(Range(rowStart,rowEnd), Range(colStart,colEnd));

Mat浅拷贝: 为了避免拷贝图像的巨大计算量,OpenCV 采用引用计数机制。即每个 Mat 对象有其自己的矩阵头,但可以共享同一个图像矩阵(即 Mat 对象的矩阵指针指向同一地址)。

Mat im = imread("a.jpg");

Mat im1 = im;

Mat im2(im);

Mat深拷贝 需要拷贝矩阵本身,可以用 Mat 的成员函数 clone() 或者 copyTo()。

Mat im1 = imread("a.jpg");

Mat im2 = im1.clone(); //矩阵内容拷贝

Mat im3; im1.copyTo(im3);  //矩阵内容拷贝

Mat的加减乘除 重载了+ , − , ∗, / 运算符的常用功能(注意数据类型和大小)

A±B,A±s,s±A,−A 可进行加减运算

− A  表示取反 α ∗A 可以进行数乘运算  

A /α可以进行数乘运算

cv::Mat A, B, C,D;

C = A + B;  D = A - B;  C = 2 * A; D = B / 2.0;

Mat矩阵的乘法

一、 矩阵乘A*B Mat矩阵A和B被当做纯粹的矩阵做乘法运算,这就要求A的列数等于B的行数时,才能定义两个矩阵相乘。如A是m×n矩阵,B是n×p矩阵,它们的乘积AB是一个m×p矩阵。

二、 点乘A.dot(B) 参与点乘的两个Mat矩阵的数据类型(type)只能是 CV_32F、 CV_64FC1、 CV_32FC2、 CV_64FC2 这4种类型中的一种。

三、 计算两个Mat矩阵对应位的乘积A.mul(B) 要求参与运算的矩阵A的行列和B的行列数一致。计算结果是跟A或B行列数一致的一个Mat矩阵。 mul说明: 1、mul操作不对参与运算的两个矩阵A、B有数据类型上的要求,但要求A,B类型一致,不然报错; 2、Mat AB=A.mul(B),若声明AB时没有定义AB的数据类型,则默认AB的数据类型跟A和B保存一致; 3、若AB精度不够,可能产生溢出,溢出的值被置为当前精度下的最大值;

标签:Mat,8UC3,矩阵,Range,图像,CV
From: https://blog.csdn.net/yjs030609/article/details/139688877

相关文章

  • 实用软件下载:MathType最新安装包及详细安装教程
    ​MathType是一款数学公式编辑器,用于创建和编辑数学表达式、方程式和符号。它提供了直观的界面和丰富的工具,使用户能够以专业水平轻松地生成高质量的数学公式。MathType支持各种常见的数学符号和结构,包括上下标、分数、根号、积分、矩阵等等,并且可以与许多流行的文字处理软件(如......
  • D. Matrix Cascade
    原题链接题解对某一片区域+1-1等操作,二维差分,注意每一维的含义和往下一维转移的细节就行了code#include<bits/stdc++.h>usingnamespacestd;intwave1[3005]={0},wave2[3005]={0};intsum[3005]={0};strings[3005];intmain(){ios::sync_with_stdio(false);cin......
  • MATLAB偏最小二乘回归(PLSR)和主成分回归(PCR)分析光谱数据|附代码数据
    全文链接:http://tecdat.cn/?p=2655最近我们被客户要求撰写关于偏最小二乘回归(PLSR)和主成分回归(PCR)的研究报告,包括一些图形和统计输出。此示例显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回归(PCR),并讨论这两种方法的有效性当存在大量预测变量时,PLSR和PCR都是对因变量建模......
  • 2024 姿态估计/动作捕捉 开源项目 pose estimate / mocap opensource projects
    困境遮挡抖动脚与地面单目AiOS:All-in-One-StageExpressiveHumanPoseandShapeEstimation,解决了遮挡问题PhysPT:Physics-awarePretrainedTransformerforEstimatingHumanDynamics:引入物理模型HaMeR:手部捕捉TRAM:超越WHAM,可以实现高难度动作WHAC:首个......
  • 实验五:MATLAB最优化工具箱的使用
    实验五:MATLAB最优化工具箱的使用一、实验目的通过一个农业生产计划优化安排的实例求解,培养学生解决实际线性规划问题的初步能力;熟悉线性规划的建模过程;掌握Matlab优化工具箱中线性规划函数的调用。 通过一个投资组合优化问题的实例求解,培养学生解决实际二次规划问题的初步......
  • 【开源样本库分享】Five-Billion-Pixels-ENVIFormat 五十亿像素高精度样本库分享
    很高兴给大家分享一个好消息,Five-Billion-Pixels-ENVIFormat五十亿像素开源样本库(ENVI格式)正式上线了!Five-Billion-Pixels样本库是一个为遥感、地理信息系统(GIS)和图像处理领域的研究和应用而精心打造的高质量样本库。为了让更多的人受益,我们决定制作并发布ENVI格式的五十亿像素......
  • 数字调制解调技术的MATLAB与FPGA实现-数字通信及FPGA概述 【1.2】
    2.信道带宽        接下来再讨论一下通信中经常碰到的信道带宽的概念。从电子电路角度的出发,带宽本意指的是电子电路中存在一个固有通频带。这个概念或许比较抽象,我们有必要做进步的解释。大家都知道,各类复杂的电子电路无一例外都存在电感、电容或相当功能的储能元件,......
  • 显著性目标检测(弱监督):Mutual Information Regularization for Weakly-supervised
    文章地址:MutualInformationRegularizationforWeakly-SupervisedRGB-DSalientObjectDetection|IEEEJournals&Magazine|IEEEXplore摘要:1.引入一个信息上界和一个互信息最小化正则项,鼓励每个模态的解纠缠表示用于SOD;2.运用非对称的特征提取器;3.引入多模态的......
  • 基于蛙跳优化的神经网络数据预测matlab仿真
    1.程序功能描述      通过蛙跳优化算法,优化神经网络的权值参数,然后使用优化后的神经网络模型对数据进行预测,输出预测曲线。 2.测试软件版本以及运行结果展示MATLAB2022a版本运行  3.核心程序%数据归一化预处理Vmin1=min(X);Vmax1=max(X);......
  • m基于PSO-GRU粒子群优化长门控循环单元网络的电力负荷数据预测算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下: 优化前:    优化后:    对比如下:   2.算法涉及理论知识概要       基于粒子群优化(ParticleSwarmOptimization,PSO)和长门控循环单元(GatedRecurrentUnit,GRU)网络的电力负荷预测算法,是一种融合......