首先,我看过这篇文章。 How to detect an image border programmatically? 他似乎在寻找一个稍微不同的问题,虽然找到了X / Y坐标。
我只想查找给定照片周围是否存在实体边框。 我已经探索过使用ImageMagick,但这是最好的选择吗? 我从未做过任何与图像相关的编程,所以我希望只有一个简单的api可以解决这个问题。 我对如何使用这些库也很新,所以任何建议都值得赞赏。 我更喜欢Python或Java的解决方案,但一切都很好。
谢谢!
答案 0 :(得分:4)
我回答了相关问题here,删除了图片周围的任何边框,它使用了PIL。您可以轻松调整代码,使其返回True
或False
是否存在边框,如下所示:
from PIL import Image, ImageChops
def is_there_a_border(im):
bg = Image.new(im.mode, im.size, im.getpixel((0,0)))
diff = ImageChops.difference(im, bg)
diff = ImageChops.add(diff, diff, 2.0, -100)
bbox = diff.getbbox()
return bbox != (0,0,im.size[0],im.size[1])
但是,即使图像的一侧只有边框,也会返回True
。但听起来你想知道图像周围是否有边框。为此,请将最后一行更改为:
return all((bbox[0], bbox[1], (bbox[0] + bbox[2]) <= im.size[0],
(bbox[1] + bbox[3]) <= im.size[1]))
如果每边都有边框,则只返回true。
例如:
False:
False:
True:
答案 1 :(得分:1)
在看到fraxel的答案之后,我发现如果你不在乎边框有多宽,你可以裁剪出每边最外面的像素并检查颜色是否均匀。应该很快;通过将背景颜色设置为0,0处的像素,并裁剪1,1到w-2,h-2,剩下的图像应该只有1种颜色。
答案 2 :(得分:0)
因此,最后一行的正确代码应为:
return all((bbox[0], bbox[1], bbox[2]) < im.size[0], bbox[3] < im.size[1]))
对吗?对于getbbox()函数的最后两个参数,是“边框的右下像素坐标”,而不是宽度和高度