opencv矩阵的掩膜操作

Lucas在澳洲
Python领域优质创作者
2022-08-11 09:28:01

矩阵的掩膜操作

主要内容

  1. 获取图像像素指针
  2. 掩膜操作

    获取图像像素指针

    Mat.ptr(int i=0) 获取像素矩阵的指针,索引i表示第几行,从0开始计行数。
    获得当前行指针const uchar* current= myImage.ptr(row );
    获取当前像素点P(row, col)的像素值 p(row, col) =current[col]

像素范围处理

  • saturate_cast(-100),返回 0。
  • saturate_cast(100),返回100。
  • saturate_cast(288),返回255。

这个函数可以确保RGB的值的范围再0-255之间。

矩阵掩膜操作

在这里插入图片描述

说的简单一点就是:图像是像素集合到一起的产物,那么我们的掩膜操作就是找到一个3*3的矩阵中的中心点像素,将他的上下左右加起来,再用中间像素的五倍去减,然后赋值给中间像素。
代码示例:

int cols = (src.cols-1) * src.channels();
int offsetx = src.channels();
int rows = src.rows;

dst = 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 = dst.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]));
    }
}

filter2D()函数

定义掩膜:

Mat kernel = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D( src, dst, src.depth(), kernel );

其中src与dst是Mat类型变量、src.depth表示位图深度,有32、24、8等。
这个代码的效果与上面的代码效果是相同的。

...全文
21 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

88

社区成员

发帖
与我相关
我的任务
社区管理员
  • c_university_162
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧