小编Dr.*_*pis的帖子

适当的图像阈值处理以使用 opencv 在 python 中为 OCR 做准备

我真的是 opencv 的新手,也是 python 的初学者。

我有这张图片:

原始 bmp 24 位图像

我想以某种方式应用适当的阈值来保留 6 位数字。

更大的图景是我打算尝试分别对每个数字的图像执行手动 OCR,在每个数字级别上使用 k-最近邻算法 (kNearest.findNearest)

问题是我无法充分清理数字,尤其是带有蓝色水印的“7”数字。

到目前为止,我尝试过的步骤如下:

我正在从磁盘读取图像

# IMREAD_UNCHANGED is -1
image = cv2.imread(sys.argv[1], cv2.IMREAD_UNCHANGED)
Run Code Online (Sandbox Code Playgroud)

然后我只保留蓝色通道以去除数字“7”周围的蓝色水印,有效地将其转换为单通道图像

image = image[:,:,0] 
# openned with -1 which means as is, 
# so the blue channel is the first in BGR
Run Code Online (Sandbox Code Playgroud)

单通道 - 仅红色 - 图像

然后我将它乘以一点以增加数字和背景之间的对比度:

image = cv2.multiply(image, 1.5)
Run Code Online (Sandbox Code Playgroud)

相乘图像以增加对比度

最后我执行 Binary+Otsu 阈值处理:

_,thressed1 = cv2.threshold(image,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
Run Code Online (Sandbox Code Playgroud)

二值欧胡岛阈值图像

正如您所看到的,最终结果非常好,除了数字“7”保留了很多噪音。

如何改善最终结果?请在可能的情况下提供图像示例结果,这比仅代码片段更好理解。

python ocr opencv image-processing image-thresholding

4
推荐指数
1
解决办法
2483
查看次数