Mat 构造方法实例

17 篇文章 0 订阅
  • Mat M(2,2,CV_8UC3,Scalar(0,0,255));
    cout << "M= "<< endl << "  "<< M << endl;

M :   [0,0,255 0,0,255

 0,0,255,  0,0,255 ]

sizeof(M) = 56####

CV_8UC3:

CV_[位数][是否为带符号类型U为Unsigned char][类型前缀]C[通道数]

Scalar 是short向量

使用定制化值来初始化矩阵

还可以用来表示颜色

  • 多维矩阵

int sz[]={3,3,3};

Mat L(3,sz,CV_8UC,Scalar::all(0));

——这里编译不能通过??

  • IpIImage 指针创建信息头

Ip1Image* img = cvLoadImage("1.jpg",1);

Mat mtx(img);

  • 利用Create() 函数

Mat M;
M.create(4,4,CV_8UC(2));
cout << M << endl;

—— 输出4行,205 205 205 205 205 205 205 205

——为什么是 205?

  • Matlab式初始化方式

Mat M= Mat::eye(4,4,CV_64F);
cout << M << endl; //单位矩阵
cout << sizeof(M);     //还是56 果然是信息头,不包含矩阵

 

 

Mat M= Mat::ones(4,4,CV_64F);
cout << M << endl;// 全为1 矩阵
cout << sizeof(M);      //56

 

Mat M= Mat::zeros(4,4,CV_64F);
cout << M << endl;
cout << sizeof(M);  //56  全为0

 

  • 使用逗号,对小矩阵分隔式  分别 赋值

Mat M= (Mat_<double>(3,3)<< 0,-1,2,3,4,5,67,8,0);
cout << M << endl;
cout << sizeof(M);

  • 通过已经存在的对象创建信息头

Mat M= (Mat_<double>(3,3)<< 0,-1,2,3,4,5,67,8,0);
cout << M << endl;
cout << sizeof(M);


cout << """""""""""""""" << endl;
Mat Rowclone = M.row(1).clone();
cout << Rowclone << endl;

 

随机方法填充Mat矩阵

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

using namespace std;
using namespace cv;

int main()
{
	
	Mat uR(3,3,CV_8UC3);
	cout << uR << endl;
	//均匀分布填充
	randu(uR, Scalar::all(0), Scalar::all(255));
	cout << uR << endl;
	

	Mat nR(3, 3, CV_8UC3);
	cout << nR << endl;
	randn(nR, Scalar::all(100), Scalar::all(25)); //第一个数字为均值,第二个为标准差
	cout << nR << endl;
	
	Mat nR2(3, 3, CV_8UC3);
	cout << nR2 << endl;
	randn(nR2, Scalar(20,100,150), Scalar(50,25,5)); //第一个数字为均值,第二个为标准差,2个分别对应
	cout << nR2 << endl;
	waitKey(0);
		return 0;
	}

	

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值