我正在尝试学习如何消除验证码图像的噪点。我开始尝试在图像中查找图案。
1)背景始终为橙色:
2)字体相同且尺寸相同。
现在是时候尝试消除噪音了,但是在我的搜索中,我无法理解如何有效地利用验证码消除噪音。
我熟悉C#,正在阅读有关OpenCV的信息,如何使用它来消除图像中的噪点?
最佳答案
这是一个非常简单的方法:
这是每个步骤的可视化:
二进制图像
变形开口+轮廓区域过滤
反转图像以获得结果
这是其他图像的输出
我在python中实现了这个方法,但是您可以将相同的策略应用于C#
import cv2
# Load image, grayscale, adaptive threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,3)
# Morph open
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
# Remove noise by filtering using contour area
cnts = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
area = cv2.contourArea(c)
if area < 10:
cv2.drawContours(opening, [c], -1, (0,0,0), -1)
# Invert image for result
result = 255 - opening
cv2.imshow('thresh', thresh)
cv2.imshow('opening', opening)
cv2.imshow('result', result)
cv2.waitKey()