基础图像容器Mat的介绍
1.Mat的介绍:
1-1Mat作为一个类 由矩阵头(矩阵的尺寸 储存方法以及储存的地址)以及指向储存所有像素点的指针组成
1-2:由于基于c++ Mat 不需要手动开辟空间 自动进行空间的处理(非特殊要求)
opencv机制:采用所有的Mat对象共享一个矩阵 采用拷贝构造的方法实现空间的公有性
如何拷贝:拷贝矩阵头和指针
2.像素点的介绍
2-1.介绍:
像素是指由图像的小方格即所谓的像素(pixel)组成的,这些小方块都有一个明确的位置和被分配的色彩数值,
而这些一小方格的颜色和位置就决定该图像所呈现出来的样子。可以将像素视为整个图像中不可分割的单位或者是元素,
不可分割的意思是它不能够再切割成更小单位抑或是元素,它是以一个单一颜色的小格存在。每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。
2.将一幅图放大很多倍以后 看到的是一个个的带颜色的小方格 所有的带方格的像素点组成了图像
3.像素点的颜色存储方式一般有几种 称为"颜色系统"(RGB HSV HLS YCrCb CLE)
(注:以RGB而言 使用color_red color_green color_blue(红绿蓝),每种分0到255层次 实现对于颜色的不同呈现)
2-2.操作
1.与其说Mat是一个类 倒不如说Mat是一个颜色的容器 通过Mat开始实现图像的存储
3.code
1.采用Mat的默认构造进行初始化(常见方法)
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
void main()
{
//1.采用默认构造初始化矩阵
cv::Mat M(3, 2, CV_8UC3, cv::Scalar(0, 0, 255));
/*function details :
1.设定矩阵的长和宽(三行两列)
2.设定像素点的通道(单通道 : 灰色 三通道 : 彩色 四通道(加入ALPHA通道 透明度))和深度(深度代表着存储每一个像素点的数据类型(8位 16位 32位))*/
std::cout << "M=" << " " << M << std::endl;
while (!(char)cv::waitKey(27) == 's');
system("pause");
}
2.采用create方法进行初始化
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
void main()
{
//采用create方法初始化矩阵
cv::Mat M;
M.create(3, 2, CV_8UC3);
std::cout << "M=" << std::endl << "" << M << std::endl << std::endl;
while (!(char)cv::waitKey(27) == 's');
system("pause");
}
3.采用MatLab式的初始化方法实现不同类型的矩阵初始化
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
void main()
{
//创建单位矩阵
cv::Mat e = cv::Mat::eye(3, 3, CV_64F);
std::cout << "e= " << std::endl << " " << e << std::endl << std::endl;
//创建初始矩阵(都为1)
cv::Mat z = cv::Mat::zeros(3, 3, CV_64F);
std::cout << "z= " << std::endl << " " << z << std::endl << std::endl;
//创建零矩阵
cv::Mat o = cv::Mat::ones(3, 3, CV_64F);
std::cout << "o= " << std::endl << " " << o<< std::endl << std::endl;
while (!(char)cv::waitKey(27) == 's');
system("pause");
}
注:该笔记参考于浅墨大神的opencv3编程入门 ,在这里只列出了常用方法 ,创建Mat的方法至少有七种,有兴趣的可以参考原书