如何用C++和OpenCV检测轮廓自相交?

Pav*_*vel 5 c++ geometry opencv image-processing contour

我需要测试自相交的轮廓,但我不知道它是如何实现的。或者我如何在 cv::Mat 中仅检测没有自相交的轮廓?

在此输入图像描述

F. 前。左轮廓必须匹配,右轮廓不匹配

FiR*_*iTi 3

这是一个解决方案:

  1. 骨架+修剪=>将轮廓减少到单个像素宽度
  2. 对于每个像素,计算邻居的数量
  3. 如果一个像素有两个以上的邻居,那么它就位于交叉点的中间。
  4. (可选)连接组件标记以区分不同的形状。

您还可以使用霍夫变换。