繁体   English   中英

如何使用java opencv去噪图像

[英]How to denoise an image using java opencv

就我而言,我想删除图像中的所有黑点。 在这里,我的图像可以呈现如下。 当我使用我的程序时,图像正在平滑,但程序没有删除黑点。 请帮我去除黑点。请尽快回复我原始图像代码如下。

public class Denoise {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try{
            System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         Mat source =Imgcodecs.imread("C:\\Users\\My Kindom\\Downloads\\printscreen.JPG",Imgcodecs.CV_LOAD_IMAGE_COLOR);

         Mat destination = new Mat(source.rows(),source.cols(),source.type());
         destination = source;
         Photo.fastNlMeansDenoisingColored(source,destination, 10, 10, 7, 21);
         Imgcodecs.imwrite("C:\\Users\\My Kindom\\Downloads\\Denoise.jpg", destination);

        }catch(Exception e){}
        // TODO code application logic here
    }

目的地图片

简单地说,您可以应用阈值来分割黑点。 然后,使用它作为蒙版,进行修复。 修复不会影响图像的其他区域作为去噪。 我不太确定你所说的黑点是什么意思,所以我应用了一个简单的阈值。 您可以尝试使用不同的阈值、使用inRange或其他方法来生成蒙版。 我也在使用任意的修复半径。 您可以通过分析蒙版中的轮廓区域然后决定半径来改进它。

原创

原创

蒙版和修复:阈值 = 70,半径 = 20

面具70 dn70

蒙版和修复:阈值 = 100,半径 = 20

面具100 DN100

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
import org.opencv.photo.Photo;

public class Dnoise {

    public static void doDnoise()
    {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        Mat rgb = Highgui.imread("ybD8q.jpg");

        Mat gray = new Mat(rgb.size(), CvType.CV_8U);
        Imgproc.cvtColor(rgb, gray, Imgproc.COLOR_BGR2GRAY);
        Mat mask = new Mat(rgb.size(), CvType.CV_8U);
        Imgproc.threshold(gray, mask, 70, 255, Imgproc.THRESH_BINARY_INV);
        Mat dn = new Mat(rgb.size(), CvType.CV_8UC3);
        Photo.inpaint(rgb, mask, dn, 20, Photo.INPAINT_TELEA);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM