zoukankan      html  css  js  c++  java
  • opencv-02--图像的邻域操作

    图像的邻域操作

    很多时候,我们对图像处理时,要考虑它的邻域,比如3*3是我们常用的,这在图像滤波、去噪中最为常见,下面我们介绍如果在一次图像遍历过程中进行邻域的运算。

    下面我们进行一个简单的滤波操作,滤波算子为[0 –1 0;-1 5 –1;0 –1 0]。

    它可以让图像变得尖锐,而边缘更加突出。核心公式即:sharp(i.j)=5*image(i,j)-image(i-1,j)-image(i+1,j)-image(i,j-1)-image(i,j+1)。

    void ImgFilter2d(const Mat &image,Mat& result)
    {
        result.create(image.size(),image.type());
        int nr=image.rows;
        int nc=image.cols*image.channels();
        for(int i=1;i<nr-1;i++)
        {
            const uchar* up_line=image.ptr<uchar>(i-1);//指向上一行
            const uchar* mid_line=image.ptr<uchar>(i);//当前行
            const uchar* down_line=image.ptr<uchar>(i+1);//下一行
            uchar* cur_line=result.ptr<uchar>(i);
            for(int j=1;j<nc-1;j++)
            {
                cur_line[j]=saturate_cast<uchar>(5*mid_line[j]-mid_line[j-1]-mid_line[j+1]- up_line[j]-down_line[j]);
            }
        }
        // 把图像边缘像素设置为0
        result.row(0).setTo(Scalar(0));
        result.row(result.rows-1).setTo(Scalar(0));
        result.col(0).setTo(Scalar(0));
        result.col(result.cols-1).setTo(Scalar(0));
    }

    image

    上面的程序有以下几点需要说明:

    1,staturate_cast<typename>是一个类型转换函数,程序里是为了确保运算结果还在uchar范围内。

    2,row和col方法返回图像中的某些行或列,返回值是一个Mat。

    3,setTo方法将Mat对像中的点设置为一个值,Scalar(n)为一个灰度值,Scalar(a,b,c)为一个彩色值。

  • 相关阅读:
    我所认识的JavaScript
    谈如何边做事,边提高
    对JavaScript开发中困扰的思考
    Soundex语音算法
    Perl分割字符串的一个精妙的写法
    Perl深拷贝
    Git diff hash顺序的问题
    perl命令行批量修改文件内容
    IOS写文件
    删除Linux乱码文件
  • 原文地址:https://www.cnblogs.com/wjgaas/p/3594050.html
Copyright © 2011-2022 走看看