0
点赞
收藏
分享

微信扫一扫

【个人笔记】OpenCV4 C++ 快速入门 03课

星河出山 2022-01-20 阅读 51

03 图像对象的创建与赋值

opencv知识点:

  • mat - 简述
  • 3种复制 - 克隆/拷贝 + 赋值
  • 创建空白图像 - Mat::zeros + Mat::ones + “=” + Scalar

本课解决的问题:

  • Mat是什么?
  • 克隆/拷贝与赋值的区别?
  • 如何创建空白图像?
  • 如何对矩阵赋值?

1.Mat简述

在opencv中,Mat类分为两个部分

  • 矩阵头
  • 矩阵数据

在这里插入图片描述

矩阵头

矩阵数据

这里说一下赋值,与克隆/拷贝的区别

2.Mat对象

3种常见的复制

//1.克隆
Mat m1 = src.clone();

//2.拷贝
src.copyTo(m2);

//3.赋值
Mat m3 = src;

创建空白图像

Mat m4 = Mat::zeros(src.size(),src.type())
/*
矩阵填充0
	行列为src行列
		数据类型为src的数据类型
*/
Mat m5 = Mat::zeros(Size(512,512),CV_8UC3);
/*
矩阵填充0
	行列为512*512
		数据类型为CV_8UC3(8UC指8位无符号字符,3指3个通道)			
*/
Mat m6 = Mat::ones(Size(512,512),CV_8UC3);
/*
矩阵填充1
	其余与上相同
*/

C11创建图像的新方式

Mat kernel = (Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);

3.本课的代码

//函数定义
void mat_creation_demo(Mat& image);

//函数实现
void QuickDemo::mat_creation_demo(Mat& image) {

	Mat m1, m2;

	//克隆,拷贝
	m1 = image.clone();
	image.copyTo(m2);

	//创建空白图像
	Mat m3 = Mat::zeros(Size(8, 8), CV_8UC3);

	std::cout<<"cols:" << m3.cols <<"rows:" << m3.rows<<"channels:" << m3.channels()<<std::endl;

	std::cout << m3 << std::endl;
}

4.矩阵赋值

Mat::zeros

Mat m3 = Mat::zeros(Size(8, 8), CV_8UC1);

Mat m3 = Mat::zeros(Size(8, 8), CV_8UC3);

当为CV_8UC1时,此时1个通道,8行8列
在这里插入图片描述
当为CV_8UC3时,此时1个通道,8行8*3列
在这里插入图片描述

那么如何获取图像的行数,列数,通道数呢?

m3.cols;
m3.rows;
m3.channels();

在这里插入图片描述

Mat::ones

当填充为1的时候,要特别小心

Mat m3 = Mat::ones(Size(8, 8), CV_8UC1);

Mat m3 = Mat::ones(Size(8, 8), CV_8UC3);

1通道没问题
在这里插入图片描述
3通道,只在每3个的第一个为1
在这里插入图片描述

“=” + Scalar

m3=127;

当给m3赋值1个值时,每3个的第一个为127
在这里插入图片描述
那怎么全变成127呢?那就用到了Scalar

m3=Scalar(127,127,127);

在这里插入图片描述
那我们来显示一下,全127,对应的图像

imshow("创建图像",m3);

在这里插入图片描述

本课所用API查阅

1.Mat::zeros
常用的有两种

在这里插入图片描述

在这里插入图片描述
2.Mat::ones
常用的有两种

在这里插入图片描述

在这里插入图片描述
3.Scalar
在这里插入图片描述

举报

相关推荐

0 条评论