如何使用java opencv

时间:2016-04-19 10:52:28

标签: java opencv

在我的情况下,我想删除图像中的所有黑点。在这里我的图像可以表示如下。当我正在使用我的程序时,图像正在平滑程序如何不删除黑点。请帮我删除黑点。请尽快回复我 Original Image  代码如下。

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
    }

Destination Image

1 个答案:

答案 0 :(得分:2)

简单地说,您可以应用阈值来分割黑点。然后,使用它作为面具,进行修复。修复不会影响图像的其他区域进行去噪。我不太清楚黑点是什么意思,所以我应用了一个简单的阈值。您可以尝试使用不同的阈值,使用 inRange 或其他任何来生成掩码。我也使用任意的修复半径。您可以通过分析遮罩中的轮廓区域然后确定半径来使其更好。

<强>原始

original

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

mask70 dn70

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

mask100 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);
    }

}