【问题标题】:OpenCV - Removing noise from imageOpenCV - 从图像中去除噪声
【发布时间】:2014-05-22 19:35:21
【问题描述】:

这是我的图片:

我想从我的图像中去除噪点(不相关的小黑色像素)。
我尝试了gaussiancvtColoradaptiveThreshold,但没有一个成功。
想法?如果您有 java 中的代码会有所帮助。

【问题讨论】:

  • 你试过“侵蚀”吗?
  • 你应该看看形态学操作,比如:打开、关闭、侵蚀、扩张。

标签: java opencv image-processing


【解决方案1】:

根据应用程序的不同,去噪可能会很棘手。对于您的图像,像关闭/打开这样的简单形态学操作可以解决问题。打开操作有助于消除图像中的噪点。关闭将有助于填补现有的漏洞。

由于 OpenCV c++ API 类似于 Java,您可以使用以下内容:

cv::Mat Kernel = cv::Mat(cv::Size(Maximum_Width_of_Noise,Maximum_Height_of_noise),CV_8UC1,cv::Scalar(255));

cv::morphologyEx(Input_Image,temp,cv::MORPH_OPEN,Kernel);
cv::morphologyEx(temp,Output_Image,cv::MORPH_CLOSE,Kernel);

有很多方法,但这里需要在准确性/速度之间进行权衡。

以上操作的结果是:

【讨论】:

  • 我设置最大高度和宽度等于3,结果如上图
  • 要完全填写数字,您可以在最终图像上设置一个阈值,这样您就可以得到一个漂亮而干净的数字......我很高兴我终于设法帮助了 SO 中的某个人! !!
  • :] 好吧,gj,我会按照你的建议尝试塑造我的形象。
  • @omriman12 你是否让它与 Java 一起工作?我已经尝试过了,但对我不起作用,我看不到图像有任何变化。
  • 我的错,它正在工作public static void denoise(String imgInPath, String imgOutPath) { Mat image = Highgui.imread(imgInPath); Mat out = new Mat(); Mat tmp = new Mat(); Mat kernel = new Mat(new Size(3, 3), CvType.CV_8UC1, new Scalar(255)); Imgproc.morphologyEx(image, tmp, Imgproc.MORPH_OPEN, kernel); Imgproc.morphologyEx(tmp, out, Imgproc.MORPH_CLOSE, kernel); Highgui.imwrite(imgOutPath, out); }
猜你喜欢
  • 1970-01-01
  • 2017-07-05
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多