我有以下图像作为测试图像:
我试图找到图像(和其他图像)上的形状。我现在的方法如下:
- 具有 3x3 内核的高斯模糊
- 使用列表进行精明边缘检测(获取所有形状)
- Morphology 与 MorphOp.Close 关闭边缘
- FindContours 查找轮廓
- 每个轮廓的迭代:
- 查找 ApproxPolyDP
- 找到 ConvexHull
- 如果船体尺寸 < 2、大约面积 < 200 或船体尺寸 > 50000 或弧长大约 < 100,则丢弃
- 绘制凸包
这几乎是完美的,但请注意,这些线条被视为轮廓事件->供应商和事件->文档)。查看边缘信息时,很明显为什么会这样:
线条被检测为轮廓。我如何准备/找到形状以便检测不到线条?我虽然有一些细化算法,但由于我也在处理现实生活中的图像,所以很难找到一个有效的阈值。这是一个现实生活图像的示例,其中很难进行细化,因为细化通常要求图像是黑白单色的。
你会怎么做?有什么方法可以确定轮廓/凸包是线、矩形还是类似的东西?