Mat对象的初始化和一些相关操作函数
2017-04-08 11:12
519 查看
Mat对象在opencv的图像处理中起着至关重要的作用。对于Mat对象的初始化有很多种方法。
(1)Mat(Size size, int type);//size数据可以通过Mat的子函数size获取,type数据表示图像的类型,常用的有CV_8UC3、CV_8UC1,第一个是说每个像素单元是8位uchar类型,图像通道数是3(比如BGR图像),第二个不同在于图像通道数是1(比如灰度图)
(2)Mat(int row,int col,int type,const Scalar &s);//这种初始化规模用行数列数表示(row与col可以和Size交换。无论用那个效果一样),Scalar用来初始化Mat对象内容,详见代码
(3)Mat.create(int row,int col,int type);Mat对象=Scalar();//利用Mat的子函数create来建立一个Mat对象,但是只能确定规模和类型,需要用Scalar函数来初始化内容。
测试代码如下:
初始化出来的图像大小与原图一致,颜色均为红色(BGR:0,0,255)。
=================================================分割线================================================================
下面介绍一下一些常用的Mat子函数或者是和Mat对象相关的函数。
(1)void copyTo(Mat mat);//把自身复制一份赋给对象mat。
(2)Mat clone();//与copyTo的作用类似,返回一个和本身完全相同的Mat对象。
(3)int channels();//返回图像的通道数。
(4)bool empty();//判断Mat对象是否为空,常用于判读读取是否成功。
(5)uchar* ptr<uchar>(row);//获取图像第row行的头指针。
代码如下:
(1)Mat(Size size, int type);//size数据可以通过Mat的子函数size获取,type数据表示图像的类型,常用的有CV_8UC3、CV_8UC1,第一个是说每个像素单元是8位uchar类型,图像通道数是3(比如BGR图像),第二个不同在于图像通道数是1(比如灰度图)
(2)Mat(int row,int col,int type,const Scalar &s);//这种初始化规模用行数列数表示(row与col可以和Size交换。无论用那个效果一样),Scalar用来初始化Mat对象内容,详见代码
(3)Mat.create(int row,int col,int type);Mat对象=Scalar();//利用Mat的子函数create来建立一个Mat对象,但是只能确定规模和类型,需要用Scalar函数来初始化内容。
测试代码如下:
#include<opencv2\opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { Mat src = imread("1.jpg",1); if (src.empty())//判断是否读取到数据 { cout << "cannot load!" << endl; getchar(); return 0; } namedWindow("原图"); imshow("原图", src); Mat dst1(src.size(), src.type(), Scalar(0, 0, 255)); namedWindow("初始化1"); imshow("初始化1", dst1); int row = src.rows, col = src.cols; Mat dst2 = Mat(row, col, src.type(), Scalar(0, 0, 255)); namedWindow("初始化2"); imshow("初始化2", dst2); Mat dst3 = Mat(row, col, CV_8UC3, Scalar(0, 0, 255));//因为图像是三通道的,所以每个大单元包含3个数,这里初始化为(0,0,255)表示红色 namedWindow("初始化3"); imshow("初始化3", dst3); Mat dst4; dst4.create(row, col, CV_8UC3); dst4 = Scalar(0, 0, 255);//另一种初始化内容的方式,效果一样 namedWindow("初始化4"); imshow("初始化4", dst4); waitKey(0); return 0; }效果图:
初始化出来的图像大小与原图一致,颜色均为红色(BGR:0,0,255)。
=================================================分割线================================================================
下面介绍一下一些常用的Mat子函数或者是和Mat对象相关的函数。
(1)void copyTo(Mat mat);//把自身复制一份赋给对象mat。
(2)Mat clone();//与copyTo的作用类似,返回一个和本身完全相同的Mat对象。
(3)int channels();//返回图像的通道数。
(4)bool empty();//判断Mat对象是否为空,常用于判读读取是否成功。
(5)uchar* ptr<uchar>(row);//获取图像第row行的头指针。
代码如下:
#include<opencv2\opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { Mat src = imread("1.jpg",1); if (src.empty())//判断是否读取到数据 { cout << "cannot load!" << endl; getchar(); return 0; } namedWindow("原图"); imshow("原图", src); /*Mat dst1(src.size(), src.type(), Scalar(0, 0, 255)); namedWindow("初始化1"); imshow("初始化1", dst1); int row = src.rows, col = src.cols; Mat dst2 = Mat(row, col, src.type(), Scalar(0, 0, 255)); namedWindow("初始化2"); imshow("初始化2", dst2); Mat dst3 = Mat(row, col, CV_8UC3, Scalar(0, 0, 255));//因为图像是三通道的,所以每个大单元包含3个数,这里初始化为(0,0,255)表示红色 namedWindow("初始化3"); imshow("初始化3", dst3); Mat dst4; dst4.create(row, col, CV_8UC3); dst4 = Scalar(0, 0, 255);//另一种初始化内容的方式,效果一样 namedWindow("初始化4"); imshow("初始化4", dst4);*/ Mat dst1; src.copyTo(dst1); namedWindow("copyTo"); imshow("copyTo", dst1); Mat dst2; dst2= src.clone(); namedWindow("clone"); imshow("clone", dst2); int cn = src.channels(); printf("原图的通道数:%d\n", cn); uchar* pix = src.ptr<uchar>(0);//获取第一行像素值 for (int i = 0; i < src.cols; i++) printf("%d ", pix[i]); waitKey(0); return 0; }效果图:
相关文章推荐
- jquery操作数组和对象的一些常用函数
- Date对象的一些相关函数
- string对象的初始化和一些操作
- c#中文件操作的一些相关函数
- 面向对象之构造函数(可让程序运行前初始化一些东西)、函数(方法)重载
- Libevent源码分析-----与event相关的一些函数和操作
- Libevent源码分析-----与event相关的一些函数和操作
- 【libevent】源码分析(4)--与event相关的一些函数和操作
- 名称:图的一些基本相关操作函数
- Libevent源码分析-----与event相关的一些函数和操作
- 对32位的无符号int的位进行操作的一些相关函数
- JS中一些对象的学习和一些函数的相关知识
- Libevent源码分析-----与event相关的一些函数和操作
- Date对象的一些相关函数
- 一个项目中使用到的通用函数库(5) 汉字相关操作
- C文件操作相关函数解析
- C中文件操作相关函数
- 与process&thread相关的一些函数
- C++中文件操作的一些函数
- 文件内核对象的相关函数