我真的是opencv的新手,也是python的初学者。
我有这张图片:
我想以某种方式应用适当的阈值来保留 6 位数字。
更大的图景是,我打算尝试分别对每个数字的图像执行手动 OCR,在每个数字级别上使用 k-最近邻算法 (kNearest.findNearest)
问题是我无法充分清理数字,尤其是带有蓝色水印的“7”数字。
到目前为止,我尝试的步骤如下:
我正在从磁盘读取图像
# IMREAD_UNCHANGED is -1
image = cv2.imread(sys.argv[1], cv2.IMREAD_UNCHANGED)
然后我只保留蓝色通道以消除数字“7”周围的蓝色水印,有效地将其转换为单通道图像
image = image[:,:,0]
# openned with -1 which means as is,
# so the blue channel is the first in BGR
然后我将它乘以一点以增加数字和背景之间的对比度:
image = cv2.multiply(image, 1.5)
最后我执行 Binary+Otsu 阈值:
_,thressed1 = cv2.threshold(image,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
如您所见,最终结果非常好,除了数字“7”保留了很多噪音。
如何改善最终结果?请尽可能提供图像示例结果,它比单独的代码片段更好理解。