如何在Java中检测图像的边缘(透明背景)?

我的图像带有透明背景.我想找到图像的边缘并从轮廓中形成一个多边形.有多种方法/方法可以做到这一点.我想用
Java做它(它用于我的游戏,它使用JBox2d Polygons进行碰撞检测).

我已经考虑过这个问题了,我在想这是怎么回事.我可以尝试检测所有透明像素,然后反转选择并仅选择具有1个相邻透明像素的像素.这一切都很复杂,我想要一些指导.

最佳答案 你的问题有两个方面.

> Edge-detection.如果您的图像有alpha通道,那么您应该能够选择合适的阈值并执行边缘检测以找到透明/不透明像素的“边缘”.如果它只是一个带有“透明”颜色的GIF,那么它应该会更容易,因为你有效地使用黑色&白色图像.
> Vectorization.这是(非常)棘手的地方.光栅到矢量转换的领域是肥沃的土壤.我会看看如何实现像Potrace(GPL)这样的解决方案然后尝试构建我自己的解决方案.

然而,就个人而言,对于游戏,我甚至不会以这种方式尝试实时边缘/碰撞检测.由于我正在使用精灵,我会使用bounding boxes and other raster-based techniques.

如果我真的想要基于多边形的边缘/碰撞检测,那么我可能会选择事先手动跟踪边缘并将它们与每个光栅图像一起存储,然后对它们进行计算(交易空间的时间).我认为您使用的图像不是在运行时动态生成的,因此可以进行预计算.

点赞