我正在尝试删除背景颜色,以提高OCR对图像的准确性。样本如下所示:
我将所有字母保留在经过后处理的图像中,同时只删除浅紫色纹理背景。是否可以使用Imagemagick等开源软件将其转换为二进制图像(黑/白)来实现这一目标?如果背景有多种颜色怎么办?解决方案是否相同?
此外,如果我还要删除紫色字母(剧院名称)和线条以便仅保留黑色字母,该怎么办?简单的裁剪可能不起作用,因为紫色字母也可能出现在其他地方。
我正在寻找编程解决方案,而不是像Photoshop那样的工具。
答案 0 :(得分:7)
您可以使用GIMP(或任何其他图像编辑工具)执行此操作。
图像模糊:
差异图片:
二进制:
如果你是一次性做的话,GIMP可能还不错。如果您希望多次执行此操作,您可以编写一个imagemagick脚本或使用Python和OpenCV等方法编写您的方法。
上述方法存在一些问题:
答案 1 :(得分:5)
答案 2 :(得分:3)
您可以对图像应用模糊,因此您可以获得几乎清晰的背景。然后将原始图像的每个像素的每个颜色分量除以背景上的像素的相应分量。你会得到白色背景上的文字。额外的后处理可以帮助进一步。
如果文本比背景(在每个颜色组件中)更暗,则此方法适用。否则,您可以反转颜色并应用此方法。
答案 3 :(得分:1)
如果您的图像被捕获为RGB,只需使用绿色图像或快速转换可能@misha's convert to greyscale solutions可能做的拜耳模式。
答案 4 :(得分:1)
在Imagemagick中,您可以使用-lat函数来执行此操作。
convert image.jpg -colorspace gray -negate -lat 50x50+5% -negate result.jpg
application(_:didFinishLaunchingWithOptions:)
convert image.jpg -colorspace HSB -channel 2 -separate +channel \
-white-threshold 35% \
-negate -lat 50x50+5% -negate \
-morphology erode octagon:1 result2.jpg
答案 5 :(得分:0)
希望这有助于某人
使用一行代码可以使用OpenCV和python
#Load image as Grayscale
im = cv2.imread('....../Downloads/Gd3oN.jpg',0)
#Use Adaptivethreshold with Gaussian
th = cv2.adaptiveThreshold(im,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
这是结果
这里是OpenCV中Image Thresholding的链接