1,Mat 是用来存储图片的数据

他会把图片变成矩阵

1 Mat src;
2 int main(int argc, char** argv)
3 {
4      src = imread("F:\\视觉\\opencv\\pic\\MatTest.png");//读图片
5     cout << "灰度化后" << endl; 
6     cout << src << endl;
7 }

矩阵的格式如下

OpenCV 对于Mat的理解和操作_灰度

图片是这样的:

OpenCV 对于Mat的理解和操作_OpenCV_02

用dos显示是这样的

OpenCV 对于Mat的理解和操作_OpenCV_03

灰度化之后是这样的

OpenCV 对于Mat的理解和操作_数据_04

怎么样是不是看上去有点熟悉

没错,灰度化后直接把每个位置的像素的值,组成一个矩阵,

而没有灰度化时是如图一所示。


 

2,Mat获取某一点坐标的值

 cout << (int)src.ptr<uchar>(1)[1] << endl;

锐化的案例:

 1 int cols = (src.cols-1)*src.channels();
 2     int rows = src.rows;
 3     int channels = src.channels();
 4     int offsetx = src.channels();
 5     Mat dst1 = Mat::zeros(src.size(), src.type());
 6     for (int row = 1; row < (rows - 1); row++) 
 7     {
 8         const uchar* previous = src.ptr<uchar>(row - 1);
 9         const uchar* current = src.ptr<uchar>(row);
10         const uchar* next = src.ptr<uchar>(row + 1);
11         uchar* output = dst1.ptr<uchar>(row);
12         for (int col = offsetx; col < cols; col++) {
13             output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsetx] + current[col + offsetx] + previous[col] + next[col]));
14         }
15     }
16     imshow("锐化转化后", dst1);
1 src.ptr<uchar>(row);是获取第几行的指针
2 src.ptr<uchar>(1)[1];默认是char类型,所以要转成int类型输出才能看得到,不然会输出Hex码表对于的字符信息。