c# - C#如何使用OpenCV去除验证码的噪音?
问题描述
我正在尝试学习如何去除验证码图像的噪点。我开始尝试在图像中寻找模式。
1)背景总是橙色:
2) 字体是一样的,并且是相同的大小。
现在是时候尝试消除噪音了,但是在我的搜索中,我无法理解如何使用我拥有的验证码有效地消除噪音。
我熟悉 C# 并且正在阅读有关 OpenCV 的信息,如何使用它来消除我拥有的图像中的噪声?
解决方案
这是一个非常简单的方法:
获取二值图像。加载图像,转换为灰度,自适应阈值。
隔离所需的字符。执行形态打开以消除椒盐噪声。
去除小噪音。查找轮廓并使用轮廓区域进行过滤。
反转图像。我们反转图像的原因是因为在执行 OCR 时,我们希望所需的文本为黑色,背景为白色。
这是每个步骤的可视化:
二进制图像
变形开口+轮廓区域过滤
反转图像以获得结果
这是其他图像的输出
我在 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()
推荐阅读
- c# - .net Okta 和 AWS 身份验证
- python - Django 信号:检查 ManyToManyField 内的数据是否更改/更新
- python - 使用 Azure AI 训练自定义语音
- javascript - 如果单击 iframe,如何运行功能
- c# - 如何将声明的“winm.dll”函数从 VB 翻译成 C#
- dockerfile - 创建 Docker 镜像时如何设置环境变量
- django - 为什么我的条目没有保存在 Django 的数据库中?
- r - R(dplyr)中的置信区间计算与权重
- spring - spring 和 mongodb 集成问题 - 更正应用程序的类路径,使其包含单个兼容版本
- python - 如何在 Django 中将 IST 时区转换为 UTC 时区?