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码表对于的字符信息。

posted @ 2020-01-28 21:56  Restrain  阅读(892)  评论(0编辑  收藏  举报