OPENCV对于Mat的理解和操作
1,Mat 是用来存储图片的数据
他会把图片变成矩阵
Mat src; int main(int argc, char** argv){ src = imread("F:\\视觉\\opencv\\pic\\MatTest.png");//读图片 cout << "灰度化后" << endl; cout << src << endl; }
矩阵的格式如下
图片时这样的:
用dos显示是这样的
灰度化之后是这样的
怎么样是不是看上去有点熟悉
没错,灰度化后直接把每个位置的像素的值,组成一个矩阵,
而没有灰度化时是如图一所示。
2,Mat获取某一点坐标的值
cout << (int)src.ptr<uchar>(1)[1] << endl;
锐化的案例:
int cols = (src.cols-1)*src.channels(); int rows = src.rows; int channels = src.channels(); int offsetx = src.channels(); Mat dst1 = Mat::zeros(src.size(), src.type()); for (int row = 1; row < (rows - 1); row++) { const uchar* previous = src.ptr<uchar>(row - 1); const uchar* current = src.ptr<uchar>(row); const uchar* next = src.ptr<uchar>(row + 1); uchar* output = dst1.ptr<uchar>(row); for (int col = offsetx; col < cols; col++) { output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsetx] + current[col + offsetx] + previous[col] + next[col])); } } imshow("锐化转化后", dst1);
src.ptr<uchar>(row);是获取第几行的指针
src.ptr<uchar>(1)[1];默认是char类型,所以要转成int类型输出才能看得到,不然会输出Hex码表对于的字符信息。