有人知道如何在画布中从Canny边缘检测创建形状吗?
我假设您已经根据问题的表述方式实现了Canny边缘检测 -
你可以使用这样的方法(用Java编写,但应该很容易翻译成JavaScript)和/或一些有限的行拟合方法(统计)。
本质是您必须找出连接了哪些像素,并根据边缘检测的结果自己创建多边形对象/数组。
一旦你有了连接的像素,你就可以使用点减少算法,如Ramer-Douglas-Peucker算法(这里的JavaScript实现)来避免多边形包含相似倾斜线的每个点等等。
您将遇到各种挑战,例如由于原始图像中的噪点过多而导致的短段线或"弱线","线"簇使得很难找到如何将它们连接为多边形。
有任何库可以做到这一点,但是您可以:
- 使用
getImageData()
访问像素数据的字节 [] - 在该数据之上实现您自己的卷积过滤器(这方面的示例可能在线提供)
通过这种方式,您可以找到高对比度(边缘)的区域。
编辑 我同意肯的观点——我可能误读了这个问题。
除了Ken的答案之外,如果您知道要查找哪种形状,那么您可能还想查看Hough变换,它非常适合检测线条,椭圆和其他形状,这些形状仅使用几个参数即可进行几何定义。