OpenCV - 使用Java删除图像中的噪声

时间:2017-01-16 11:22:32

标签: java android opencv image-processing

我正在尝试创建一个OCR应用程序。我需要使用轮廓定位文本。但是,我的图像有很多噪音,我想知道是否有办法将其删除。

我目前的代码:

// Input image already converted to a matrix
Imgproc.cvtColor(matrixImage, matrixImage, Imgproc.COLOR_BGR2GRAY);

// Gaussian blur
Imgproc.GaussianBlur(matrixImage, matrixImage, new Size(7,7), 0);

Imgproc.threshold(matrixImage, matrixImage, 125, 255, Imgproc.THRESH_BINARY_INV);

// This is my current approach for removing noise. However, there is still 
// a lot of random areas that can be removed.

// Remove specs from image
Mat morphingMatrix = Mat.ones(3,3, CV_8UC1);
Imgproc.morphologyEx(matrixImage, matrixImage, Imgproc.MORPH_OPEN, morphingMatrix);

// Image denoising
Photo.fastNlMeansDenoising(matrixImage, matrixImage);

我的输入图片。我允许用户手动标记角落,以便下面的变换图像仅将变换应用于中间白纸。

input image

image after transformation

1 个答案:

答案 0 :(得分:3)

我有一个解决您问题的方法。但是,在这种情况下,它不涉及去除噪音。

第1步:

我从您上传的原始图片中获取了我自己的转换图像:

enter image description here

我认为您知道如何在问题中说明如何对图像执行转换。然而,要了解更多有关他们的信息,请访问THIS。要了解单应性项目,请访问THIS SITE

我获得了这张图片的灰度:

enter image description here

第2步:

对于此图像,我使用高斯滤波器执行自适应阈值:

enter image description here

第3步:

这一步涉及一些形态学操作:

首先,为了去除图像中不需要的斑点,我使用了形态 关闭 操作:

enter image description here

其次,我使用形态 扩张 操作(除非你想突出显示你的文字,否则你可能不需要):

enter image description here