[英]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
蒙版和修复:阈值 = 100,半径 = 20
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.