【OpenCV】Mat对象的创建

1 前言

        将介绍几种Mat对象的创建方式,以及Scalar函数的功能。相关API:

  • Scalar()
  • Size()
  • Mat()
  • Mat::zeros()
  • Mat对象.clone()
  • Mat对象.copyTo()

2 代码及内容

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

using namespace std;
using namespace cv;

int main(int argc,char *argv)
{
	//Scalar函数的运用。
	//创建大小为256x256的,8位无符号单通道图像(灰度图像)
	Mat t1 = Mat(256, 256, CV_8UC1);
	//设置全体像素通道的值,单通道只设置一个值,0为黑。
	t1 = Scalar(0);
	imshow("黑图", t1);

	//创建大小为512x512的,8位无符号三通道图像(彩色图像)
	Mat t2 = Mat(Size(512, 512), CV_8UC3);
	//设置全体像素通道的值,三通道设置三个值(BGR),0,0,255为红。
	t2 = Scalar(0, 0, 255);
	imshow("红图", t2);

	//Mat对象的多种创建方式
	//第一种
	Mat t3 = Mat(256, 256, CV_8UC1);

	//第二种,Size()的使用
	Mat t4= Mat(Size(512, 512), CV_8UC3);

	//第三种,zeros()的使用,让创建的图像像素值起始为0
	Mat t5 = Mat::zeros(Size(256, 256), CV_8UC3);

	//第四种,依靠别的图来创建
	Mat t6 = t5;		//1、t6与t5实际上是同一幅图,修改其中任意一个都会影响到另一个
	Mat t7 = t5.clone();//2、t7和t5是两幅图,互不影响。
	t5.copyTo(t7);		//3、效果和2是一样的,互不影响。

	//第五种,创建了一个大小和t5完全一样的像素值为0的图(黑图)
	Mat t8 = Mat::zeros(t5.size(), t5.type());


	waitKey(0);
	destroyAllWindows();
	return 0;
}

需要注意:

  1. Scalar函数的参数问题,要根据图像的通道数量来决定参数数量。以及在三个通道时,其参数排序为BGR。
  2. 几种Mat的创建方式。尤其是图像的复制问题,要知道哪种方式才是真正的复制。以及代码中第五种创建方式,为什么大小是一样的要知道,因为尺寸一样,且图片类型一样即每个像素的通道数和每个通道的位数一样,所以大小才一样。

3 结束语

        没啦。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值