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

lia*_*dee 5 java image collision-detection jbox2d

我的图像具有透明背景。我想找到图像的边缘,并从轮廓形成多边形。我可以有多种方法/方式。我想用Java(针对我的游戏,使用JBox2d Polygons进行碰撞检测)来实现。

我已经对此进行了一些思考,并正在考虑如何进行。我可以尝试检测所有透明像素,然后反转选择,仅选择具有1个相邻透明像素的像素。这都是非常复杂的,我需要一些指导。

Ali*_*ael 3

你的问题有两个方面。

  1. 边缘检测。如果您的图像具有 Alpha 通道,那么您应该能够选择合适的阈值并执行边缘检测以找到透明/不透明像素的“边缘”。如果它只是一个带有“透明”颜色的 GIF,那么它应该更容易一些,因为您正在有效地处理黑白图像。

  2. 矢量化。这就是事情变得(真正)棘手的地方。光栅到矢量转换领域是一片沃土。我会研究如何实施 Potrace (GPL) 等解决方案,然后尝试构建我自己的解决方案。

然而,对于游戏来说,就我个人而言,我什至不会尝试这种方式进行实时边缘/碰撞检测。由于我使用的是精灵,因此我会使用边界框和其他基于光栅的技术

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