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 }
矩阵的格式如下
图片是这样的:
用dos显示是这样的
灰度化之后是这样的
怎么样是不是看上去有点熟悉
没错,灰度化后直接把每个位置的像素的值,组成一个矩阵,
而没有灰度化时是如图一所示。
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码表对于的字符信息。