定义:Mat对象是OpenCV2.0之后引进的图像数据结构,自动分配内存,不存在内存泄漏的问题,是面向对象的数据结构,分了两部分,头与数据部分
Mat对象构造函数
Mat()
Mat(int rows,int cols, int type)
Mat(Size size,int type)
Mat(int rows,int cols,int type,const Scalar&S)
Mat(Size size,int type,const Scalar&S)
Mat(int ndims,const int*sizes,int type)
Mat(int ndims,const int*sizes,int type,const Scalar&S)
常用方法
void copyTo(Mat mat)复制某个对象
void convertTo(Mat dst,int type)从一个8位切换为浮点数
Mat clone()复制
int channels()通道数
int depth()深度
bool empty()是否为空
uchar* ptr(i=0)图像(行)指针
实例化图片:
克隆图片,查看通道数,切换图片的通道以及查看图片的行和列
用构造函数初始化图片:
方法一:
//CV_8UC3 8表示8位,U表示无符号,C表示char类型,1表示1通道,Scalar表示初始化像素的值
Mat M(3, 3, CV_8UC1, Scalar(127));
cout << "M" << endl << M << endl;
方法二:
//使用creat创建
Mat z;
z.create(src.size(), src.type());
z = Scalar(0, 0, 255);
方法三:
//定义小数组
Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(src, drt, src.depth(), kernel);
方法四:
//创建多维数组cv::Mat::create
int size[3] = { 2,2,2 };
Mat L(3, size, CV_8SC1, Scalar::all(0));
//eye对角线对称,zeros全都初始化为0
Mat m2 = Mat::eye(2, 2, CV_8SC1);
Mat m2 = Mat::zeros(2, 2, CV_8SC1);
下面是全部代码:
#include <opencv2/opencv.hpp>
#include <iostream>//输入输出流
#include <math.h>
using namespace cv;
using namespace std;//标准的输入输出
int main(int argc, char** argv) {
Mat src = imread("F:/识图/645-140GG51042.JPG");
if (src.empty())
{
cout << "conld not image" << endl;
return -1;
}
namedWindow("GRIL", CV_WINDOW_AUTOSIZE);
imshow("GRIL", src);
//两种克隆方式
//Mat drt = src.clone();
Mat drt;
//src.copyTo(drt);
//查看通道数src.channels();
//切换通道
cvtColor(src, drt, CV_RGB2BGRA);
namedWindow("DRT", CV_WINDOW_AUTOSIZE);
imshow("DRT", drt);
//拿到图像的行和列号(宽和高)
int cols = drt.cols;
int rows = drt.rows;
//打印
printf("src image channels : %d\n", src.channels());
printf("drt image channels : %d\n", drt.channels());
printf("drt image cols : %d\n", cols);
printf("drt image rows : %d\n", rows);
//CV_8UC3 8表示8位,U表示无符号,C表示char类型,1表示1通道,Scalar表示初始化像素的值
Mat M(3, 3, CV_8UC1, Scalar(127));
cout << "M" << endl << M << endl;
//创建多维数组cv::Mat::create
int size[3] = { 2,2,2 };
Mat L(3, size, CV_8SC1, Scalar::all(0));
//使用creat创建
Mat z;
z.create(src.size(), src.type());
z = Scalar(0, 0, 255);
//定义小数组
Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(src, drt, src.depth(), kernel);
//eye对角线对称,zeros全都初始化为0
Mat m2 = Mat::eye(2, 2, CV_8SC1);
Mat m2 = Mat::zeros(2, 2, CV_8SC1);
waitKey(0);
return 0;
}
0-0这一篇就到此结束啦,每天进步一点点,总有收获哈哈!加油!