opencv 基础图像容器 Mat

基础图像容器 Mat

#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>

using namespace std;
using namespace cv;

int main()
{
	/// 显式创建Mat对象的七种方法
	//【方法一】使用Mat构造函数
	Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255));
	cout << "M = " << endl << " " << M << endl << endl;
	//【方法二】在C\C++中通过构造函数进行初始化(未验证成功)
	/*int sz[3] = { 2,2,2 };
	Mat L(3, sz, CV_8UC3, Scalar(0, 0, 255));
	cout << "L = " << endl << " " << L << endl << endl;*/
	//【方法三】为已存在的IplImage指针创建信息头
	//无法引入opencv1的头文件
	//【方法四】利用Create()函数
	M.create(4, 4, CV_8UC2);
	cout << "M = " << endl << " " << M << endl << endl;
	//【方法五】采用matlab式的初始化形式
	Mat E = Mat::eye(4, 4, CV_64F);
	cout << "E = " << endl << " " << E << endl << endl;
	Mat O = Mat::ones(2, 2, CV_32F);
	cout << "O = " << endl << " " << O << endl << endl;
	Mat Z = Mat::zeros(3, 3, CV_8UC1);
	cout << "Z = " << endl << " " << Z << endl << endl;
	//【方法六】对小矩阵使用逗号分隔式初始化函数
	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;
	cout << "C = " << endl << " " << C << endl << endl;

	///Opencv中的格式化输出方法
	Mat r = Mat(10, 3, CV_8UC3);
	randu(r, Scalar::all(0), Scalar::all(255));
	//【风格一】Opencv默认风格
	cout << "r(Opencv默认风格) = " << r << ";" << endl << endl;
	//【风格二】Python风格
	cout << "r(Python风格) = " << format(r, Formatter::FMT_PYTHON) << ";" << endl << endl;
	//【风格三】逗号分隔风格(Comma separated values, CSV)
	cout << "r(逗号分隔风格) = " << format(r, Formatter::FMT_CSV) << ";" << endl << endl;
	//【风格四】Numpy风格
	cout << "r(Numpy风格) = " << format(r, Formatter::FMT_NUMPY) << ";" << endl << endl;
	//【风格五】C语言分格
	cout << "r(C语言分格) = " << format(r, Formatter::FMT_C) << ";" << endl << endl;

	///输出其他常用数据结构
	//1.定义和输出二维点
	Point2f p(6, 2);
	cout << "【二维点】p = " << p << ";\n" << endl;
	//2.定义和输出三维点
	Point3f p3f(8, 2, 0);
	cout << "【三维点】p3f = " << p3f << ";\n" << endl;
	//3.定义和输出基于Mat的std::vector
	vector<float> v;
	v.push_back(3);
	v.push_back(5);
	v.push_back(7);
	cout << "【基于Mat的vector】shortvec = " << Mat(v) << ";\n" << endl;
	//4.定义和输出std::vector点
	vector<Point2f> points(20);
	for (size_t i = 0;i < points.size();i++)
	{
		points[i] = Point2f((float)(i * 5), (float)(i % 7));
	}
	cout << "【二维点向量】points = " << points << ";\n" << endl;
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧:
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<lumen>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值