我是一位初学者,对opencv和python都很陌生。
我有这张图片: 我希望能够适当使用阈值处理来保留仅有的6个数字。
更大的问题是,我打算尝试分别对每个数字执行手动OCR,使用k最近邻算法在每个数字级别上进行(kNearest.findNearest)。
问题在于我无法清理数字,特别是“7”数字,其上有这种蓝色水印通过。
到目前为止我尝试过以下步骤:
我正在从磁盘读取图像。
然后我只保留蓝色通道,以消除数字“7”周围的蓝色水印,从而有效地将其转换为单通道图像。
我有这张图片: 我希望能够适当使用阈值处理来保留仅有的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)
最后我执行二值加Otsu阈值处理:_,thressed1 = cv2.threshold(image,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
正如您所看到的,最终结果相当不错,除了数字“7”保留了很多噪音。
如何改善最终结果?如果可能,请提供图像示例结果,这比仅有代码片段更易理解。