OpenCV中Mat对象及其创建

在opencv中,Mat用来存储图像的数据结构。由两部分构成:

矩阵头:包含矩阵尺寸、存储方法和存储地址等信息
指针:一个指向存储所有像素值的矩阵的指针

在这里插入图片描述
002程序:

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

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	Mat src = imread("D:/VC2017_WORKSPACE/Images/dog.jpg", IMREAD_COLOR);
	if (src.empty()) {
		printf("could not find image file");
		return -1;
	}
	namedWindow("demo-002", WINDOW_NORMAL);
	imshow("demo-002", src);
	//imwrite("D:/VC2017_WORKSPACE/Images/Imwrite/testone.png",src);
	waitKey(0);
	destroyAllWindows();
	return 0;
}

显示:
在这里插入图片描述
在上述程序基础上,增加获取图像信息并打印:

//获取图像的宽度、高度、通道数
int width = src.cols;
int height = src.rows;
int dim = src.channels();

在这里插入图片描述
转为灰度后:
在这里插入图片描述

Mat对象的创建图像
  • 创建空白Mat对象
  • 创建填充值的Mat对象
  • 创建单通道与多通道Mat对象
  • 创建与原图大小和类型相同的Mat对象
Mat grayBack = Mat(256, 256, CV_8UC1);//创建一个256*256大小的单通道图像
grayBack = Scalar(0);//将创建的单通道图像变成黑色
imshow("grayBack", grayBack);
//方法一:
Mat colorBack = Mat(256, 256, CV_8UC3);//创建一个256*256大小的三通道图像
colorBack = Scalar(0, 0, 255);//将创建的三通道图像变成红色
imshow("colorBack", colorBack);

显示结果:
在这里插入图片描述

//方法二:
Mat colorBack1 = Mat(Size(512, 512), CV_8UC3);//创建一个512*512大小的三通道图像
colorBack1 = Scalar(255, 0, 255);//改变创建的三通道图像颜色
imshow("colorBack1", colorBack1);

显示结果:
在这里插入图片描述

Mat colorBack2 = Mat::zeros(Size(256, 256), CV_8UC3);//直接创建一个256*256大小的三通道图像(黑色)
imshow("colorBack2", colorBack2);

显示结果:
在这里插入图片描述

Mat backGround = Mat::zeros(src.size(), src.type());//创建一个与原图大小、类型相同的黑色背景图像
imshow("backGround", backGround);

在这里插入图片描述

注意赋值和克隆、拷贝的区别:

Mat t1 = src;//赋值,改变t1后,src也会改变
Mat t2 = src.clone();//克隆,改变t2后,src不变
Mat t3;
src.copyTo(t3);//拷贝,改变t3后,src不变

一个工程下包含多个项目的方法:

在这里插入图片描述
上图已有两个项目,现在此基础上继续新建。方法:选中解决方案->右键->添加->新建项目。名称和路径修改,确定。
在这里插入图片描述
选择空项目,确定。
在这里插入图片描述
在这里插入图片描述
然后,分别右键点击源文件–>添加–>新建项,添加cpp源文件
在这里插入图片描述
cpp源文件添加成功
在这里插入图片描述
在opencv4_002.cpp中编写完成程序后,要想运行,需将其设为启动项目(否则会继续运行opencv4_001.cpp)
在这里插入图片描述
重新生成解决方案,然后运行程序,执行的才是002的结果
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值