如何使用Python识别图像中的字母?

时间:2017-03-28 16:18:56

标签: python opencv image-processing

我试图使用OpenCV来识别图像的字母。

到目前为止,我正在阅读图片>应用模糊>识别字母的边缘,但对于其中一些字母,它运作良好,但其中大多数我面临着两种问题:

  1. 有时cv2.Canny()无法识别所有字母,或只是其中的一部分(如下面的示例,它缺少最后一个字母" d"它只是一部分这封信" m")

  2. 有些字母下面有一个阴影,它已被识别为边缘并位于字母下方。

  3. 原始图片:

    enter image description here

    已处理的图片:

    enter image description here

    代码:

    img = cv2.imread('.\\new_letters\\image.jpg', 0)
    blur = cv2.GaussianBlur(img,(5,5),0)
    edges = cv2.Canny(blur,20,60)
    

    请问我是否知道如何正确识别所有字母以及如何删除某些字母阴影所创建的线条?

1 个答案:

答案 0 :(得分:3)

如上所述,我尝试使用 DoG (高斯差异)。但在此之前,我使用直方图均衡来增强图像。

equalized_image = cv2.equalizeHist(gray_img)
cv2.imwrite('Equalized Image.jpg', equalized_image)

这是直方图均衡图像:

enter image description here

然后我就此执行了DoG:

imgb1 = cv2.GaussianBlur(equalized_image, (11, 11), 0)
imgb2 = cv2.GaussianBlur(equalized_image, (31, 31), 0)
diff = imgb1 - imgb2
cv2.imwrite('diff.jpg',diff)

结果:

enter image description here

它看起来不太好,但考虑到你的图像质量,这是你可以得到的最大值。如果它是一个更好的形象,结果会更好。

注意:高斯差异基本上是边缘检测器的另一种形式。