我有很多类似此gif的图像:
我想修剪它们以除去不平坦的边框,只在边框内保留文字,例如:
一些源图像有些旋转,边框位置略有不同,所以我需要一些东西来动态地找到围绕文字的矩形。
最好的方法是什么?
最佳答案
这不是一个完整或严格的解决方案,而是可以帮助您解决问题的答案。我选择使用ImageMagick,它已安装在大多数Linux发行版中,并且可免费用于OSX和Windows。在Sourceforge上有一些Java绑定(bind)(我不使用或不知道),称为im4java
。您也可以在PHP,Perl,C++,C ...
无论如何,在命令行中,您可以将手稿的第一帧([0]
)转换为Hue / Saturation / Lightness色彩空间,并丢弃Saturation和Lightness,这样您就只剩下Hue了,就像这样:
convert manuscript.gif[0] -colorspace hsl -separate -delete 1,2 -blur 0x3 -contrast-stretch 10% -threshold 50% hue.png
然后,我对比一下拉伸(stretch)它,并将其另存为
hue.png
。看起来像这样:然后,我可以拍摄该图像(
hue.png
)并在其上应用“连接组件分析”(也称为“斑点分析”),并丢弃所有小的斑点-斑点只是连续的区域。convert hue.png \
-define connected-components:verbose=true \
-define connected-components:area-threshold=10000 \
-connected-components 8 -auto-level output.png
Objects (id: bounding-box centroid area mean-color):
6: 645x1033+50+78 372.4,594.0 663108 gray(0)
0: 851x1231+0+0 595.5,678.2 244279 gray(0)
2: 728x1123+9+36 376.7,604.3 140194 gray(255)
如果我在第一个黑色方框中用红色绘制,如下所示:
convert manuscript.gif[0] -fill none -stroke red -strokewidth 5 -draw "rectangle 50,78 695,1100" result.png
我会得到这个:
或者,我可以这样裁剪:
convert manuscript.gif[0] -crop 645x1033+50+78 result.png
并得到这个:
您可能需要在数字和值上花些力气,但总体思路应完全适用于您的问题。
关于image - 检测图像中特定颜色的矩形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36221625/