zoukankan      html  css  js  c++  java
  • OpenCV入门:(三:图片Mask operations)

    Mask operations 翻译为中文应该是掩模操作,具体操作步骤就是根据一个操作矩阵(又名kernel)处理图片中的每一个像素点,操作矩阵会根据当前像素点的周围像素来调整当前像素值。

    1.示例

    以一个增强图片对比度的示例来说明Mask operations。增强对比度的公式如下:

    image

    公式左右两边都能实现同样的操作,但是右边矩阵形式看起来更加好看些。

    2.测试代码

    本文分别使用两种方法实现上述公式:

    2.1 实现公式左边

    void Sharp(const Mat& Src,Mat& Dst)
    {
        //只能处理8位图片
        CV_Assert(Src.depth() == CV_8U);
        Dst.create(Src.size(),Src.type());
    
        const int nChannel = Src.channels();
    
        //遍历行
        for (int j = 1; j < Src.rows - 1; j++)
        {
            //前一行 当前行 以及下一行的指针
            const uchar* pre = Src.ptr<uchar>(j - 1);
            const uchar* cur = Src.ptr<uchar>(j);
            const uchar* next = Src.ptr<uchar>(j + 1);
    
            //获取结果图像所在行的指针
            uchar* output = Dst.ptr<uchar>(j);
            for (int i = nChannel; i < nChannel*(Src.cols - 1); i++)
            {
                //使用公式计算后将值保存到输出矩阵中
                *output++ = saturate_cast<uchar>(5*cur[i] 
                - cur[i-nChannel] - cur[i+nChannel] - pre[i] - next[i]);
            }
        }
    
        Dst.row(0).setTo(Scalar(0));
        Dst.row(Dst.rows - 1).setTo(Scalar(0));
        Dst.col(0).setTo(Scalar(0));
        Dst.col(Dst.cols - 1).setTo(Scalar(0));
    }

    2.2 OpenCV 自带函数filter2D

    void OpenCV_Sharp(const Mat& Src,Mat& Dst)
    {
        //初始化"内核"矩阵
        Mat Kern = (Mat_<char>(3,3)<<
                    0,-1,0,
                    -1,5,-1,
                    0,-1,0);
        filter2D(Src,Dst,Src.depth(),Kern);
    }

    3.结果对比

    使用Lena图片对两个函数进行测试:

    测试结果如下:

    原图:

    image

    公式实现结果:

    image

    OpenCV操作结果

    image

    4.结束

  • 相关阅读:
    saltstack之(九)配置管理源码部署Nginx
    saltstack之(八)配置管理部署LAMP
    saltstack之(七)配置管理系统初始化init
    saltstack之(六)配置管理state
    saltstack之(五)数据系统Grains和Pillar
    Visual Studio 2010 如何改用 Beyond Compare 作为 TFS 的比较工具
    C++名人的网站 转
    使用MAP文件快速定位程序崩溃代码行 (转)
    Mybatis自动生成实体类,映射文件,dao
    MinGW安装教程( MinGW
  • 原文地址:https://www.cnblogs.com/Reyzal/p/5014380.html
Copyright © 2011-2022 走看看