我有很多类似此gif的图像:
image - 检测图像中特定颜色的矩形-LMLPHP

我想修剪它们以除去不平坦的边框,只在边框内保留文字,例如:
image - 检测图像中特定颜色的矩形-LMLPHP

一些源图像有些旋转,边框位置略有不同,所以我需要一些东西来动态地找到围绕文字的矩形。

最好的方法是什么?

最佳答案

这不是一个完整或严格的解决方案,而是可以帮助您解决问题的答案。我选择使用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。看起来像这样:

image - 检测图像中特定颜色的矩形-LMLPHP

然后,我可以拍摄该图像(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

我会得到这个:

image - 检测图像中特定颜色的矩形-LMLPHP

或者,我可以这样裁剪:
convert manuscript.gif[0] -crop 645x1033+50+78 result.png

并得到这个:

image - 检测图像中特定颜色的矩形-LMLPHP

您可能需要在数字和值上花些力气,但总体思路应完全适用于您的问题。

关于image - 检测图像中特定颜色的矩形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36221625/

10-11 22:45
查看更多