有没有办法知道特定值以下颜色的RGB值是浅色

时间:2017-06-14 18:55:14

标签: java image-processing colors ocr rgb

我正在尝试使用Tesseract OCR和Cuneiform OCR从图像中获取文本。

但是,如果文本是小字体或字体很薄,则生成的文本中会有错误。

我们需要获取文本的大多数图像都是以深色返回文本,而图像的其余部分则为浅色。所以我想将所有较浅的颜色转换为白色,然后增加缓冲图像的大小,以便生成的文本是正确的。 (如果我的方法有误,请纠正我。)

任何人都可以提供有关如何实现这一目标的任何信息真的很有帮助

1 个答案:

答案 0 :(得分:1)

如果您的OCR引擎的文字太小/太薄,那么您无法做到这一点。

如果造成对比问题导致OCR引擎出现问题,那么“黑暗”会变暗,“灯光”变亮也是一个不错的选择。

以下是我之前使用过的对比公式,效果很好:

float contrast = 0.2;
float factor = (x*(contrast + y)) / (x - contrast);

其中x&gt; 1.0意味着更多的对比度并且x <1。 1.0表示对比度较低 y是任何颜色分量的最大值(通常为1.0或255)

编辑:判断颜色是否比其他颜色浅:

  1. 使用以下方式之一将颜色转换为灰度:
  2.   

    亮度方法平均最突出和最不突出的颜色:   (max(R,G,B)+ min(R,G,B))/ 2。

         

    平均方法简单地平均值:(R + G + B)/ 3.

         

    发光度方法是平均值的更复杂版本   方法。它还对值进行平均,但它形成加权平均值   考虑到人类的感知。我们对绿色比对绿色更敏感   其他颜色,所以绿色加权最重。的公式   发光度为0.21 R + 0.72 G + 0.07 B。

    1. 比较结果值以查看哪个更亮。