首页 > 其他 > 详细

opencv-02--图像的邻域操作

时间:2014-03-12 06:21:28      阅读:437      评论:0      收藏:0      [点我收藏+]

图像的邻域操作

很多时候,我们对图像处理时,要考虑它的邻域,比如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)。

bubuko.com,布布扣
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));
}
bubuko.com,布布扣

bubuko.com,布布扣

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

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

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

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

 

opencv-02--图像的邻域操作,布布扣,bubuko.com

opencv-02--图像的邻域操作

原文:http://www.cnblogs.com/wjgaas/p/3594050.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!