Opencv Mat类

Opencv Mat类

(一)赋值运算:
Mat 类中的赋值算子 “=” 和 拷贝构造函数,涉及的是浅拷贝,仅仅是复制了矩阵头。
如果想要深拷贝,达到复制图像矩阵的目的,应使用 clone() 或 copyTo() 函数。
(二)常用构造方法:
1、无参数构造方法;

Mat::Mat()

2、创建行数为 rows,列数为 col,类型为 type 的图像;

Mat::Mat(int rows, int cols, int type)

3、创建大小为 size,类型为 type 的图像;

Mat::Mat(Size size, int type)

4、创建行数为 rows,列数为 col,类型为 type 的图像,并将所有元素初始化为值 s;

Mat::Mat(int rows, int cols, int type, const Scalar& s)

cv::Mat image(640, 480, CV_8U, cv::Scalar(255));

5、创建大小为 size,类型为 type 的图像,并将所有元素初始化为值 s;

Mat::Mat(Size size, int type, const Scalar& s)

cv::Mat image(img.size(), CV_8U, cv::Scalar(0));

6、将m赋值给新创建的对象,此处不会对图像数据进行复制,m和新对象共用图像数据,属于浅拷贝;

Mat::Mat(const Mat& m)

7、创建的新图像为m的一部分,具体的范围roi指定,此构造函数也不进行图像数据的复制操作,新图像与m共用图像数据。

Mat::Mat(const Mat& m, const Rect& roi)

8、创建3*3矩阵

Mat mat= (Mat_<float>(3, 3) <<0, 1, 2, 3, 4, 5, 6, 7, 8);

9、特殊矩阵

Mat image = Mat::eye(3, 3, CV_32F);//单位矩阵
Mat image  = Mat::zeros(3, 3, CV_8UC1);//零矩阵
Mat image  = Mat::eye(3, 3, CV_64F);//对角矩阵
Mat image = Mat::ones(3, 3, CV_32F);//一矩阵

补充:Mat 中元素的数据类型,其格式为 CV_{8U, 16S, 16U, 32S, 32F, 64F}C{1, 2, 3} 或 CV_{8U, 16S, 16U, 32S, 32F, 64F}C(n)

CV_8U:8U 表示 8 位无符号整数0~255,单通道
CV_8UC3:C表示char,3表示三通道

(三)成员函数:
1、访问灰度图test.jpg图像的(0 , 0)元素

uchar ele = image.at<uchar>(0,0);
cout <<(int) ele << endl;

三通道图像:image.at(i,j)[x]表示某个通道中在(i,j)位置的像素值。
x=0(B),x=1(G),x=2(R)
double型数据
浮点数
相当于CV_8UC3

cv::Mat image(3, 3, CV_8UC3, cv::Scalar(100, 200, 300));
uchar ele = image.at<cv::Vec3b>(1, 1)[0];
cout <<(int) ele << endl;

2、读取图像第0行,首个像素地址、读取首个像素值。

image.ptr <uchar>(0);
image.ptr <uchar>(0)[0];

3、channels返回图像通道数

image.channels()

4、复制图像

img = image.clone()

5、读取图像尺寸

image.size()

6、读取图像行、列

image.rows
image.cols

7、读取图像类型

image.type()

在这里插入图片描述
8、读取图像深度,用来度量每一个像素中每一个通道的精度

image.depth()

CV_8U=0,CV_8S=1,CV_16U=2,CV_16S=3,CV_32S=4,CV_32F=5,CV_64F=6

9、saturate_cast防止数据溢出

cv::saturate_cast<uchar>(-100)//输出为0
cv::saturate_cast<uchar>(260)//输出为255

10、数据类型转化

void convertTo( OutputArray m, int rtype, double alpha=1, double
beta=0 ) const;

m – 目标矩阵。如果m在运算前没有合适的尺寸或类型,将被重新分配。
rtype – 目标矩阵的类型。
alpha – 尺度变换因子(可选)。
beta – 附加到尺度变换后的值上的偏移量(可选)。
image类型是CV_8UC1,转为CV_64FC1类型

image.convertTo(image_out,CV_64FC1);
image.convertTo(image_out, CV_64FC1, 1 / 255.0)

pixel_out = pixel*1/255+255

11、数据类型对应关系

Mat_<uchar>---------CV_8U
Mat<char>-----------CV_8S
Nat_<short>---------CV_16S
Mat_<ushort>--------CV_16U
Mat_<int>-----------CV_32S
Mat_<float>----------CV_32F
Mat_<double>--------CV_64F

12、Mat范围赋值

Mat a = Mat::zeros(3, 3, CV_32F);
Mat b = Mat::ones(2, 3, CV_32F);
b.copyTo(a.rowRange(0, 2));

后期补充!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值