如果图像的rgb值等于阈值,我想对图像进行以下循环以删除或修改像素。
目标是删除图像的背景并将图像提供给OCR。
我尝试了两种不同的方法来做到这一点。
方法1:
基本上,我要做的是获取平均背景像素值。 然后遍历所有像素并检查哪些像素等于平均背景像素。
for x in range(0, w):
for y in range(0, h):
if Pixel(img[y, x]).compare(pixel, threshold):
img[y, x] = 255
else
img[y, x] = 0
比较功能将检查它是否> = / <=像素-/ +阈值。那么如果它返回true,它将把像素变为白色,否则变为黑色。
这很好用,但是当您使用较大的图片时,它太慢了。
方法2: 只需使用opencv方法删除背景即可。
简单地:
img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
th3 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 41, 2)
第一种方法是减慢速度,第二种方法仅在图像带有白色背景时起作用。
我确实需要不同的背景颜色。
我发现了一些关于将numpy数组向量化的事情。但是,真的找不到一个很好的例子。
答案 0 :(得分:0)
以具体示例回答问题:
#load an image as grayscale
#get the background average pixel value, it out of the scope of this question, different methods to achieve
bg_avg = get_bg_avg_px_val(img)
th = 80
background_mask = logical_and((bg_avg - th) <= img, img <= (bg_avg + th))
text_mask = logical_or((bg_avg - th) >= img, img >= (bg_avg + th))
img[selected] = 255
img[text] = 0