当前位置:   article > 正文

Mat对象的初始化和一些相关操作函数_mat初始化

mat初始化

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函数来初始化内容。

测试代码如下:

  1. #include<opencv2\opencv.hpp>
  2. #include<iostream>
  3. using namespace std;
  4. using namespace cv;
  5. int main()
  6. {
  7. Mat src = imread("1.jpg",1);
  8. if (src.empty())//判断是否读取到数据
  9. {
  10. cout << "cannot load!" << endl;
  11. getchar();
  12. return 0;
  13. }
  14. namedWindow("原图");
  15. imshow("原图", src);
  16. Mat dst1(src.size(), src.type(), Scalar(0, 0, 255));
  17. namedWindow("初始化1");
  18. imshow("初始化1", dst1);
  19. int row = src.rows, col = src.cols;
  20. Mat dst2 = Mat(row, col, src.type(), Scalar(0, 0, 255));
  21. namedWindow("初始化2");
  22. imshow("初始化2", dst2);
  23. Mat dst3 = Mat(row, col, CV_8UC3, Scalar(0, 0, 255));//因为图像是三通道的,所以每个大单元包含3个数,这里初始化为(0,0,255)表示红色
  24. namedWindow("初始化3");
  25. imshow("初始化3", dst3);
  26. Mat dst4;
  27. dst4.create(row, col, CV_8UC3);
  28. dst4 = Scalar(0, 0, 255);//另一种初始化内容的方式,效果一样
  29. namedWindow("初始化4");
  30. imshow("初始化4", dst4);
  31. waitKey(0);
  32. return 0;
  33. }
效果图:


初始化出来的图像大小与原图一致,颜色均为红色(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. #include<opencv2\opencv.hpp>
  2. #include<iostream>
  3. using namespace std;
  4. using namespace cv;
  5. int main()
  6. {
  7. Mat src = imread("1.jpg",1);
  8. if (src.empty())//判断是否读取到数据
  9. {
  10. cout << "cannot load!" << endl;
  11. getchar();
  12. return 0;
  13. }
  14. namedWindow("原图");
  15. imshow("原图", src);
  16. /*Mat dst1(src.size(), src.type(), Scalar(0, 0, 255));
  17. namedWindow("初始化1");
  18. imshow("初始化1", dst1);
  19. int row = src.rows, col = src.cols;
  20. Mat dst2 = Mat(row, col, src.type(), Scalar(0, 0, 255));
  21. namedWindow("初始化2");
  22. imshow("初始化2", dst2);
  23. Mat dst3 = Mat(row, col, CV_8UC3, Scalar(0, 0, 255));//因为图像是三通道的,所以每个大单元包含3个数,这里初始化为(0,0,255)表示红色
  24. namedWindow("初始化3");
  25. imshow("初始化3", dst3);
  26. Mat dst4;
  27. dst4.create(row, col, CV_8UC3);
  28. dst4 = Scalar(0, 0, 255);//另一种初始化内容的方式,效果一样
  29. namedWindow("初始化4");
  30. imshow("初始化4", dst4);*/
  31. Mat dst1;
  32. src.copyTo(dst1);
  33. namedWindow("copyTo");
  34. imshow("copyTo", dst1);
  35. Mat dst2;
  36. dst2= src.clone();
  37. namedWindow("clone");
  38. imshow("clone", dst2);
  39. int cn = src.channels();
  40. printf("原图的通道数:%d\n", cn);
  41. uchar* pix = src.ptr<uchar>(0);//获取第一行像素值
  42. for (int i = 0; i < src.cols; i++)
  43. printf("%d ", pix[i]);
  44. waitKey(0);
  45. return 0;
  46. }
效果图:





声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/886877
推荐阅读
相关标签
  

闽ICP备14008679号