zoukankan      html  css  js  c++  java
  • Java Opencv 实现 中值滤波器


    原理

    Note

    以下原理来源于Richard Szeliski 的著作 Computer Vision: Algorithms and Applications 以及 Learning OpenCV

    • 平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法。

    • 平滑处理的用途有很多, 但是在本教程中我们仅仅关注它减少噪声的功用 (其他用途在以后的教程中会接触到)。

    • 平滑处理时需要用到一个 滤波器 。 最常用的滤波器是 线性 滤波器,线性滤波处理的输出像素值 (i.e. g(i,j)) 是输入像素值 (i.e. f(i+k,j+l))的加权和 :

      g(i,j) = sum_{k,l} f(i+k, j+l) h(k,l)

      h(k,l) 称为 , 它仅仅是一个加权系数。

      不妨把 滤波器 想象成一个包含加权系数的窗口,当使用这个滤波器平滑处理图像时,就把这个窗口滑过图像。

    • 滤波器的种类有很多, 这里仅仅提及最常用的:

    中值滤波将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的 中值 代替 。

    Java 实现Code:

    package com.gitee.dgw.lesson8;
    
    import com.gitee.dgw.lesson1.platformUtils;
    import org.opencv.core.Mat;
    import org.opencv.core.Size;
    import org.opencv.core.Point;
    import org.opencv.highgui.HighGui;
    import org.opencv.imgcodecs.Imgcodecs;
    import org.opencv.imgproc.Imgproc;
    
    /**
     * @program: learn-opencv
     * @description:
     * @author: Mr.Dai
     * @create: 2020-03-10 20:02
     **/
    public class MedianFilter {
    
    
        private final  static String path=System.getProperty("user.dir")+"\catton.jpg";
        /// 全局变量
        private final  static int MAX_KERNEL_LENGTH = 31;
    
        static{
            platformUtils.loadLibraries();
        }
    
        public static void main(String[] args) {
            Mat src = new Mat();
            Mat dst=new Mat();
            //读取一张图片
            //image=Imgcodecs.imread(path);
    
            //读取一张灰度图片
            src= Imgcodecs.imread(path,Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
    
            if (src.empty()) {
                System.err.println("加载图片出错,请检查图片路径!");
                return;
            }
    
            /// 使用 均值平滑
    
            for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
            {
                //Imgproc.blur(src, dst, new Size( i, i ), new Point(-1,-1));
                Imgproc.medianBlur(src,dst,i);
            }
    
            //显示出来  对namedWindos 与cv::imshow 封装
            HighGui.imshow("dstimg showimg",src);
            HighGui.imshow("srcimage showimg",dst);
            // 无限等待按键按下
            HighGui.waitKey(0);
    
        }
    }



    无标题2

  • 相关阅读:
    Asp.Net生成二维码(中间加logo)
    简单的图片上传
    C#读取路径
    Asp.Net读取配置文件
    C#监听服务
    jQuery 遍历--siblings() 方法、each() 方法
    Window 6大内置对象
    MySQL中几个重要的参数
    DNS构建实战(下篇)
    DNS构建实战(上篇)
  • 原文地址:https://www.cnblogs.com/dgwblog/p/12458289.html
Copyright © 2011-2022 走看看