代码之家  ›  专栏  ›  技术社区  ›  Sean

OCR:低对比度/噪声区域

  •  3
  • Sean  · 技术社区  · 6 年前

    我正在尝试识别下面显示的17个字符的代码。

    enter image description here

    我目前正在为我的管道使用OpenCV:
    (1) 转换为B&W图像
    (2) 计算梯度图像
    (3) 大津阈值
    (4) 查找等高线
    (5) 查找等高线的边界框

    当图像相对干净时,效果很好。在上面的示例中,我能够检测到“H26A838778”。有没有人知道如何处理图像左侧的对比度低且水印会增加噪声的区域?

    1 回复  |  直到 6 年前
        1
  •  1
  •   arxakoulini    6 年前

    您可以尝试使用 Simple Thresholding

    由于字符之间的颜色相同或相似,并且它们的颜色值高于背景(更白),因此可以尝试找到阈值颜色值,该值将保持字符的颜色为白色,其他所有颜色为黑色。在下面的示例(Java代码)中,这个数字是140。

    Mat original = Imgcodecs.imread("pathToOriginalImage");
    Mat gray = new Mat();
    Imgproc.cvtColor(original, gray, Imgproc.COLOR_RGB2GRAY, 0);
    Mat binary = new Mat();
    Imgproc.threshold(original,binary,140,255,Imgproc.THRESH_BINARY);
    

    转换为灰度

    gray scale

    阈值化

    binary

    OCR现在应该会给出一些好的结果。