android - 在OCR之后从Android中的图像检测字体颜色

标签 android opencv image-processing ocr tesseract

我有一张图片,使用tesseract我从中找到了文字。
我以rect(left,top,right,bottom)形式的文本的边框

我想找到我尝试遍历2D边界框矩阵的文本的字体颜色,并且将背景色与边界框中的每个颜色像素进行比较。无论我在哪里获得除背景色以外的其他颜色,我都将返回该颜色,即字体颜色。

//rectArrayList is an array list of rect for a line in the image 

for(int i=rectArrayList.get(0).left;i<rectArrayList.get(0).right ;i++){
        for(int j=rectArrayList.get(0).top;j<rectArrayList.get(0).bottom;j++){

            pixel=colorbit.getPixel(i,j);
            R = (pixel & 0xff0000) >> 16; //channel the pixel in RGB values
            G = (pixel & 0xff00) >> 8;
            B = pixel & 0xff;

//backColour is the background colour of the image 
            if(backColour!=Color.rgb(R,G,B)){ 
                return Color.rgb(R,G,B);
            }

        }

可以说背景色是黄色阴影。但是在遍历矩阵时,会得到不同的黄色阴影,它是字体颜色后面的背景颜色,而不是字体颜色。所以我得到错误的字体颜色。

我知道这项技术会失败,因为图像的背景颜色会根据亮度等而具有相同颜色的不同阴影。

我应该怎么做才能从图像中获得确切的字体颜色?

最佳答案

我可以为您提供许多不同的解决方案。从这里开始很简单:

当颜色1不等于颜色2时不要停止。增加一些公差。
计算两个RGB元组之间的欧式距离。然后检查距离是否大于某个阈值。
您也可以将RGB转换为Hue并计算两个Hue值之间的绝对差。

当然,还有更复杂,更好的解决方案,但是鉴于您对图像处理的了解,它们暂时仍无济于事。

关于android - 在OCR之后从Android中的图像检测字体颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115771/

相关文章:

android - 将元数据添加到 Android 中创建的位图中

android - Koin 安卓 : org. koin.error.NoBeanDefFoundException

java - 具有部分唤醒锁的后台重复线程的android服务

android - 解析 Volley 错误

opencv - 如何从图像中提取前景文本?

OpenCV - 在二值图像中找到最大 Blob 的边界框

opencv - 如何将 WebRTC 流式传输到 WebSocket?

matlab - 如何找到具有负值的索引并将该值替换为最接近的正值索引值?

python - 如何为图像添加高斯噪声?

python - 如何减慢 Pillow 中的图像显示速度