检查图像像素强度的方法

问题描述 投票:0回答:2

我有一个基于 OCR 的 iPhone 应用程序,它接收灰度图像并将其阈值设置为黑白以查找文本(使用 opencv)。这对于白色背景上带有黑色文本的图像效果很好。当图像是黑色背景上的白色文本时,我遇到自动切换到反向阈值的问题。是否有一种广泛使用的算法来检查图像以确定它是否是深色背景上的浅色文本,反之亦然?谁能推荐一种清洁的工作方法?请记住,我只处理 iPhone 摄像头的灰度图像。

非常感谢。

c++ iphone opencv image-processing threshold
2个回答
1
投票

由于我此时正在处理灰度

IplImage
,因此我无法计算黑色或白色像素,但必须计算高于给定“亮度”阈值的像素数。我只是使用了边框像素,因为这更便宜,并且仍然为我提供了足够的信息来做出正确的决定。

IplImage *image;
int sum = 0; // Number of light pixels
int threshold = 135; // Light/Dark intensity threshold

/* Count number of light pixels at border of image. Must convert to unsigned char type to make range 0-255. */
// Check every other pixel of top and bottom
for (int i=0; i<(image->width); i+=2) {
    if ((unsigned char)image->imageData[i] >= threshold) { // Check top
        sum++;
    }
    if ((unsigned char)image->imageData[(image->width)*(image->height)
                       - image->width + i] >= threshold) { // Check bottom
        sum++;
    }
}

//Check every other pixel of left and right Sides
for (int i=0; i<(image->height); i+=2) {
    if ((unsigned char)image->imageData[i*(image->width)] >= threshold) { // Check left
        sum++;
    }
    if ((unsigned char)image->imageData[i*(image->width) + (image->width) - 1] >= threshold) { // Check right
        sum++;
    }
}

// If more than half of the border pixels are light, use inverse threshold to find dark characters
if (sum > ((image->width/2) + (image->height/2))) {
    // Use inverse binary threshold because background is light
}
else {
    // Use standard binary threshold because background is dark
}

0
投票

我会检查每个像素并检查它是亮还是暗。 如果暗像素的数量大于亮像素的数量,则必须反转图片。

查看此处了解如何确定亮度: 检测图像中的黑色像素 iOS

这就是如何绘制反转的 UIImage:

[imyImage drawInRect:theImageRect blendMode:kCGBlendModeDifference alpha:1.0];
© www.soinside.com 2019 - 2024. All rights reserved.