OpenCV学习3-Mat对象基础操作

写在前面:早期的OpenCV是基于C的,因此使用名为lplImage的C风格的数据结构在程序内存中来存储图像, 需开发者自行分配和管理内存,风险性高。在C++介入OpenCV后,Opencv2.0引入了Mat对象类型作为图像数据结构,Mat对象包含矩阵头和一个指向像素值的矩阵的指针。内存分配和销毁处理被封装在内部,无需开发者控制,从而一举替代了lplImage。下面介绍Mat的基础功能

1.数据准备:Mat matImg = imread("D:/Learn/OpenCV/Info/PIC/dt.jpg");

2.获取图像宽度:int width=matImg.cols;

3.获取图像高度:int height=matImg.rows;

4.获取指定像素点颜色值:

注意1:以左上角为坐标原点,第一个参数表示纵向坐标,第二个参数代表横向;

注意2:OpenCV中,RGB图像的顺序是BGR;

(1).int value=matImg.at<uchar>(y,x);//用于获取单通道坐标为(y,x)位置的颜色值;

     int valueB=matImg.at<Vec3b>(y,x)[0];//用于获取3通道(BGR图像)坐标为(y,x)位置的颜色值B;

     int valueG=matImg.at<Vec3b>(y,x)[1];//用于获取3通道(BGR图像)坐标为(y,x)位置的颜色值G;

     int valueR=matImg.at<Vec3b>(y,x)[2];//用于获取3通道(BGR图像)坐标为(y,x)位置的颜色值R;

(2).const uchar currentValue=matImg.ptr<uchar>(y,x);//通过指针获取单通道指定坐标(y,x)位置的颜色值;

     const uchar currentVB=matImg.ptr<Vec3b>(y)[x][0];//通过指针获取三通道(BGR图像)坐标(y,x)位置的颜色值B;

     const uchar currentVG=matImg.ptr<Vec3b>(y)[x][1];//通过指针获取三通道(BGR图像)坐标(y,x)位置的颜色值G;

     const uchar currentVR=matImg.ptr<Vec3b>(y)[x][2];//通过指针获取三通道(BGR图像)坐标(y,x)位置的颜色值R;

5.像素范围处理:经过运算后的像素点颜色值,可能不在0-255范围内,因此OpenCV提供如下功能:

uchar lower= saturate_cast(-123);//值为0

uchar topper=saturate_cast(321);//值为255

uchar stander=staturate_cast(123);//值为123

6.Mat对象深度复制:区别尚待深入尝试

    Mat cloneMat1(matImg);
    Mat cloneMat2=matImg;
    Mat cloneMat3 = matImg.clone();
    Mat cloneMat4;
    matImg.copyTo(cloneMat4);

7.Mat对象的其他创建方法:

(1).Mat m1(600, 800, CV_8UC3, Scalar(255, 0, 0));//创建宽度800,高度600,3通道,每个通道255级颜色值,且初始化颜色为Blue的图像

(2).Mat m2(matImg.size(),magImg.type());//创建与matImg同样大小和类型的图像

     m2=Scalar(255,0,0);//初始化为纯Blue颜色值

(3).Mat m3=Mat::zeros(matImg.size(),matImg.type());

(4).Mat m4=Mat::zeros(50,50,CV_8U3);

等等,不再赘述

8.获取图像通道数:

int count=matImg.channels;

以上为Mat对象部分基础操作,本篇结束。

猜你喜欢

转载自blog.csdn.net/ShawShankChina/article/details/81215781
今日推荐