opencv 的 Mat 类使用笔记

环境 Windows,visual studio 15,opencv3.4.2,c++

1、例子1,初始化矩阵

#include 
#include

using namespace cv;
using namespace std;


int main()
{
	Mat A(2, 2, CV_8UC1, Scalar(0, 0, 255));
	cout << "A = " << endl << " " << A << endl << endl;
	Mat B(2, 2, CV_8UC2, Scalar(0, 0, 255));
	cout << "B = " << endl << " " << B << endl << endl;
	Mat C(2, 2, CV_8UC3, Scalar(0, 0, 255));
	cout << "C = " << endl << " " << C << endl << endl;
    return 0;
}

opencv 的 Mat 类使用笔记_第1张图片

创建一个2*2的矩阵,A矩阵的深度是1,B的深度是2,C的深度是3

创建的矩阵的 truew=deepth*w

其中CV_8UC1,CV_8UC2,CV_8UC3决定宽高之外的通道数,

其中8是每个数字占8位,

U是无符号字符型,

1,2,3是通道数

常用的数据格式

图片来自https://www.cnblogs.com/zvmxvm1991/p/7942881.html

opencv 的 Mat 类使用笔记_第2张图片

2、例子2,初始化矩阵

int main()
{
	Mat A(2, 2, CV_8UC1, Scalar(1));
	cout << "A = " << endl << " " << A << endl << endl;
	Mat B(2, 2, CV_8UC2, Scalar(1));
	cout << "B = " << endl << " " << B << endl << endl;
	Mat C(2, 2, CV_8UC3, Scalar(1));
	cout << "C = " << endl << " " << C << endl << endl;
    return 0;
}

opencv 的 Mat 类使用笔记_第3张图片

仅修改了了Scalar中的数据,

结论,1、Scalar中的数据个数应该跟通道数匹配,否则0填充

           2、第一个数字填充到第一个通道,第二个数字填充到第二个通道,第三个数字填充到第三个通道,类推

3、例子3,初始化矩阵

int main()
{
	Mat A(2, 2, CV_8UC1);
	cout << "A = " << endl << " " << A << endl << endl;
	Mat B(2, 2, CV_8UC2);
	cout << "B = " << endl << " " << B << endl << endl;
	Mat C(2, 2, CV_8UC3);
	cout << "C = " << endl << " " << C << endl << endl;
    return 0;
}

opencv 的 Mat 类使用笔记_第4张图片

如果构造函数没有Scalar,那么默认值是205

矩阵数据实际分布

图片来自:https://blog.csdn.net/duiwangxiaomi/article/details/93075571

opencv 的 Mat 类使用笔记_第5张图片

4、例子4,矩阵赋值

int main()
{
	Mat C(2, 2, CV_32FC3, Scalar());
	cout << "C = " << endl << " " << C << endl << endl;

	int kk = 0;
	for (int i = 0; i<2; i++)
	{
		for (int j = 0; j<6; j++)
		{
			C.at(i, j) = kk;  //方法1
            C.ptr(i)[j] = kk; //方法2
			kk = kk + 1;
		}
	}

	cout << "C = " << endl << " " << C << endl << endl;
    return 0;
}

opencv 的 Mat 类使用笔记_第6张图片

矩阵读取的时候第一个参数是行,第二个参数列,数据列数=矩阵列数*通道个数

 

 

 

 

 

 

 

 

你可能感兴趣的:(opencv 的 Mat 类使用笔记)