如何使用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或其他任何方法来生成掩码。 我也使用任意的修复半径。 您可以通过分析遮罩中的轮廓区域然后确定半径来使其更好。

原版的

原版的

mask和inpainted:threshold = 70,radius = 20

mask70 DN70

mask和inpainted:threshold = 100,radius = 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); } }