1构造
1.1 Mat img; 只是创建了一个Mat信息头,不会创建数据区
1.2 Mat::Mat(int rows,int cols,int type)
rows 列数
cols 行数
type 类型
Mat q = Mat::Mat(10, 1, CV_8UC3);
cout << q;
cout << endl;
文章图片
1.3 Mat::Mat(Size size,int type)
创建大小为size,类型为type的图像
这里注意一点在opencv中 Size是一个模版类,有成员函数Size(width,height)注意宽在前,高在后(列在前,行在后)
Mat q1 = Mat::Mat(Size(1, 3), CV_8UC1);
cout << q1;
文章图片
1.4 还可以直接赋值
Mat img = (Mat_(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);
cout << img;
文章图片
1.5 还有一些比较特殊的矩阵,比如:
全0矩阵 zreos
全1矩阵 ones
对角线为1矩阵 eye
Mat img1 = Mat::zeros(3, 3, CV_8UC1);
//全0
cout << img1;
cout << endl;
Mat img2 = Mat::ones(3, 3,CV_8UC1);
//全1
cout << img2;
cout << endl;
Mat img3 = Mat::eye(3, 3, CV_8UC1);
//对角线1
cout << img3;
cout << endl;
文章图片
1.6 一些矩阵的属性
rows 矩阵的行数
cols 矩阵的列数
dims 矩阵的维度
channels() 矩阵的通道数
Mat img = Mat::ones(100, 200, CV_8UC3);
cout << "行数" << M.rows << endl;
cout << "列数" << M.cols << endl;
cout << "通道数" << M.channels() << endl;
cout << "维数" << M.dims << endl;
文章图片
2 打印
2.1 可以直接进行输出
2.2 指针数组方式
uchar* p=(uchar*)img.data
这种情况使用两个for循环进行输出 行直接rows,列的话还要考虑三通道的情况,所以要列数通道数
2.3 ptr方式
mat.ptr(row){col}
比如:
单通道
uchar data1=img.ptr《uchar》(0){1} 指向img第一行第二个元素
uchar* data1=img.ptr《uchar》(0) 指向img第一行第一个元素
uchar* data1=img.ptr《uchar》{1} 指向img第一行第二个元素
多通道
Vec3d *data=https://www.it610.com/article/img.ptr《Vec3b》(0){0}
Mat img = Mat::ones(3, 2, CV_8UC3);
cout << img.at(1, 1);
【opencv|opencv 学习笔记(一) 矩阵构造之输出】2.4 at
用于取得图像上的点
img.at《uchar》(i,j) 取出灰度图像中i行j列的点
推荐阅读
- 《C++要笑着学》|【C++要笑着学】从零开始实现日期类 | 体会代码的复用 | 提供完整代码
- 《C语言杂俎》|【C++】几道关于this指针的面试题
- 小问《Essential|《Essential C++》笔记之漫游(面向对象编程思维)
- 《C++要笑着学》|C++要笑着学(面向对象(下))
- C++|C++——OOP(面向对象编程)其四,多态
- 机器学习|pyhton 机器学习 sklearn——手把手教你预测心脏病
- 一些好玩的事|我赌你没有了解过——Python 图像加密
- 定位|车牌识别(车牌提取+调用百度api+OCR识别)
- 蓝桥杯往届真题详解|题目 2599: 蓝桥杯2020年第十一届国赛真题-天干地支