如何去除图像 OpenCV、Python 中的噪声?

Ugu*_*can 3 python opencv image-processing computer-vision

我有一些裁剪的图像,我需要在白色背景上有黑色文本的图像。首先我应用自适应阈值,然后我尝试去除噪音。虽然我尝试了很多降噪技术但是当图像发生变化时,我使用的技术失败了。

在此处输入图片说明

将图像颜色转换为二进制图像的最佳方法是自适应高斯阈值。这是我的代码:

im_gray = cv2.imread("image.jpg",  cv2.IMREAD_GRAYSCALE)
image = cv2.GaussianBlur(im_gray, (5,5), 1)
th =  cv2.adaptiveThreshold(image,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,3,2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我需要平滑值、小数分隔符(点)和后缀字母。我怎样才能做到这一点?

fmw*_*w42 9

在 Python/OpenCV 中使用除法归一化可以做得更好一些。

输入:

在此输入图像描述

import cv2
import numpy as np

# load image
img = cv2.imread("license_plate.jpg")

# convert to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# blur
blur = cv2.GaussianBlur(gray, (0,0), sigmaX=33, sigmaY=33)

# divide
divide = cv2.divide(gray, blur, scale=255)

# otsu threshold
thresh = cv2.threshold(divide, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]

# apply morphology
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
morph = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

# write result to disk
cv2.imwrite("hebrew_text_division.jpg", divide)
cv2.imwrite("hebrew_text_division_threshold.jpg", thresh)
cv2.imwrite("hebrew_text_division_morph.jpg", morph)

# display it
cv2.imshow("gray", gray)
cv2.imshow("divide", divide)
cv2.imshow("thresh", thresh)
cv2.imshow("morph", morph)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

部门形象:

在此输入图像描述

阈值图像:

在此输入图像描述

形态学清洁图像:

在此输入图像描述

  • 将图像除以其模糊版本是一种背景去除方法。它使背景变白。 (2认同)

小智 8

在二值化之前,需要对背景的非均匀光照进行校正。例如,像这样:

import cv2

image = cv2.imread('9qBsB.jpg')
image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
se=cv2.getStructuringElement(cv2.MORPH_RECT , (8,8))
bg=cv2.morphologyEx(image, cv2.MORPH_DILATE, se)
out_gray=cv2.divide(image, bg, scale=255)
out_binary=cv2.threshold(out_gray, 0, 255, cv2.THRESH_OTSU )[1] 

cv2.imshow('binary', out_binary)  
cv2.imwrite('binary.png',out_binary)

cv2.imshow('gray', out_gray)  
cv2.imwrite('gray.png',out_gray)
Run Code Online (Sandbox Code Playgroud)

结果: 在此处输入图片说明 在此处输入图片说明


yud*_*esh 6

我假设您正在对图像进行 OCR(光学字符识别)预处理

我有一个检测车牌的项目,这些是我所做的步骤,您可以将它们应用到您的项目中。对图像进行灰度化后,尝试对图像应用均衡直方图,这允许图像中对比度较低的区域获得较高的对比度。然后模糊图像以减少背景中的噪音。接下来对图像应用边缘检测,确保充分去除噪声,因为 ED 很容易受到噪声影响。最后,对图像应用闭合(膨胀然后腐蚀)以闭合单词内的所有小孔。