当前位置: 首页 > news >正文

07_图像容器Mat_详解

Mat 对象的创建

三通道_三维矩阵的创建

方式一

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat M(2,2,CV_8UC3,Scalar(238,130,238));cout << "M= " << endl << M << endl ;imshow("创建的矩阵图",M);waitKey(0);return 0;
}

在这里插入图片描述

在这里插入图片描述

一通道_一维矩阵的创建

方式二 M.create()

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat M;M.create(4,4,CV_8UC(1));cout << "M= " << endl << M << endl ;imshow("创建的矩阵图",M);waitKey(0);return 0;
}

在这里插入图片描述

在这里插入图片描述

方式 Mat::eye()

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat E = Mat::eye(4,4,CV_64F);cout << "E= " << endl << E << endl ;imshow("创建的矩阵图",E);waitKey(0);return 0;
}

在这里插入图片描述
在这里插入图片描述

Mat::ones()

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat O = Mat::ones(4,4,CV_32F);cout << "O= " << endl << O << endl ;imshow("创建的矩阵图",O);waitKey(0);return 0;
}

在这里插入图片描述
在这里插入图片描述

Mat::zeros()

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat Z = Mat::zeros(4,4,CV_8UC1);cout << "Z= " << endl << Z << endl ;imshow("创建的矩阵图",Z);waitKey(0);return 0;
}

在这里插入图片描述

在这里插入图片描述

对小矩阵使用逗号分隔式初始化函数

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat C = (Mat_<double>(3,3)<< 0,-1,0,-1,5,-1,0,-1,0);cout << "C= " << endl << C << endl ;imshow("创建的矩阵图",C);waitKey(0);return 0;
}

在这里插入图片描述

clone()

一维矩阵_行的克隆
#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat C = (Mat_<double>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);cout << "C= " << endl << C << endl << endl ;Mat RowClone = C.row(1).clone();cout << "RowClone= " << endl << RowClone << endl << endl ;imshow("创建的矩阵图",C);imshow("复制的矩阵行",RowClone);waitKey(0);return 0;
}

在这里插入图片描述

三维矩阵_行的克隆
#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat M(3,3,CV_8UC3,Scalar(238,130,238));cout << "M= " << endl << M << endl << endl <<endl;Mat RowClone = M.row(1).clone();cout << "RowClone= " << endl << RowClone << endl << endl ;imshow("创建的矩阵图",M);imshow("复制的矩阵行",RowClone);waitKey(0);return 0;
}

在这里插入图片描述

Mat对象 格式化输出

风格: OpenCV 默认风格

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat r = Mat(10,3,CV_8UC3);randu(r,Scalar::all(0),Scalar::all(255));cout << Scalar::all(0)<< endl;cout << Scalar::all(255)<< endl;cout << "r(OpenCV默认风格)= " << endl << r << endl << endl ;imshow("创建的矩阵图",r);waitKey(0);return 0;
}

在这里插入图片描述

在这里插入图片描述

randu()函数_均匀分布
void cv::randu(InputOutputArray dst,InputArray 	low,InputArray 	high)	

dst : 输入对象(也是输出对象,会直接将dst对象覆盖掉)(通道数1-4)
low: 均匀分布最小值(包括low的),注意要匹配输入对象的通道数
high: 均匀分布最大值(不包括high),同low参数要匹配输入对象的通道数
在这里插入图片描述

风格: python 风格

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat r = Mat(10,3,CV_8UC3);randu(r,Scalar::all(0),Scalar::all(255));//cout << "r(python风格)= " << format(r,"python") <<";"<< endl << endl; cout << "r(python风格)=  \n" << format(r, Formatter::FMT_PYTHON) << endl << endl;imshow("创建的矩阵图",r);waitKey(0);return 0;
}

在这里插入图片描述

风格: 逗号分隔 风格

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat r = Mat(10,3,CV_8UC3);randu(r,Scalar::all(0),Scalar::all(255));cout << "r(逗号分隔风格)=  \n" << format(r, Formatter::FMT_CSV) << endl << endl;imshow("创建的矩阵图",r);waitKey(0);return 0;
}

在这里插入图片描述

风格: Numpy 风格

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat r = Mat(10,3,CV_8UC3);randu(r,Scalar::all(0),Scalar::all(255));cout << "r(Numpy风格)=  \n" << format(r, Formatter::FMT_NUMPY) << endl << endl;imshow("创建的矩阵图",r);waitKey(0);return 0;
}

在这里插入图片描述

风格: C语言风格

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Mat r = Mat(10,3,CV_8UC3);randu(r,Scalar::all(0),Scalar::all(255));cout << "r(C语言 风格)=  \n" << format(r, Formatter::FMT_C) << endl << endl;imshow("创建的矩阵图",r);waitKey(0);return 0;
}

在这里插入图片描述

其他常用数据结构

Point2f 二维点

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Point2f P(6,2);cout << "[二维点]p = " << P << endl << endl;return 0;
}

在这里插入图片描述

Point3f 三维点

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){Point3f p3f(8,2,0);cout << endl << "[三维点]p = " << p3f << endl << endl;return 0;
}

在这里插入图片描述

vector

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){vector<float> v;v.push_back(3);v.push_back(5);v.push_back(7);cout << "【基于Mat的vector】shortvec =  \n" << Mat(v) << endl << endl;imshow("vector",Mat(v));waitKey(0);return 0;
}

在这里插入图片描述

#include<iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main(int argc, char** argv){vector<Point2d> points(20);for(size_t i=0; i<points.size();++i){points[i] = Point2f( (float)(i*5), (float)(i%7) );}cout << "【二维点向量】 = points  \n" << points << endl << endl;return 0;
}

在这里插入图片描述

Point

Scalar

Size

Rect

http://www.lryc.cn/news/594156.html

相关文章:

  • 元学习算法的数学本质:从MAML到Reptile的理论统一与深度分析
  • maven构建Could not transfer artifact失败原因
  • 红宝书单词学习笔记 list 51-75
  • Word for mac使用宏
  • Function Callingの进化路:源起篇
  • Node.js Express keep-alive 超时时间设置
  • 基于Pytorch的人脸识别程序
  • 【JS逆向基础】数据库之redis
  • 华为开源自研AI框架昇思MindSpore应用案例:基于ERNIE模型实现对话情绪识别
  • 对于stm32RCT6的外部中断
  • `tidyverse` 中涉及的函数及其用法
  • tabBar设置底部菜单选项、iconfont图标(图片)库、模拟京东app的底部导航栏
  • GPT-4o mini TTS:领先的文本转语音技术
  • 私有云新势力:Puter+CPolar如何低成本替代商业网盘?
  • Softhub软件下载站实战开发(十九):软件信息展示
  • 42.sentinel实现线程隔离
  • 学习日志15 python
  • JAVA面试宝典 -《容灾设计:异地多活架构实践》
  • nvm、npm、pnpm、cnpm、yarn
  • Python适配器模式详解:让不兼容的接口协同工作
  • 【C语言】内存函数介绍(上)
  • 【单片机外部中断实验修改动态数码管0-99】2022-5-22
  • 从零开始的云计算生活——番外5,使用ELK实现对应用日志的监控
  • 多源异构数据融合的理论与方法
  • Modbus Slave 使用教程:快速搭建模拟从站进行测试与开发
  • JavaScript 语言基础详解
  • 论文笔记:Seed: Bridging Sequence and Diffusion Models for RoadTrajectory Generation
  • TD3与SAC强化学习算法深度对比
  • [Python] -项目实战4- 利用Python进行Excel批量处理
  • Valgrind Memcheck 全解析教程:6个程序说明基础内存错误