C#:轮廓的层次结构

2025-04-18  本文已影响0人  大龙10

一、函数参数

void Cv2.FindContours(
InputArray image,
out Point[][] contours,
out HierarchyIndex[] hierarchy,
RetrievalModes mode,
ContourApproximationModes method,
Point? offset = null
)

1、image

2、contours(输出参数)

3、hierarchy(输出参数)

4、mode: 轮廓检索模式

5、method: 轮廓近似方法

6、offset(可选)

二、示例

using OpenCvSharp;

Mat src = Cv2.ImRead("image.jpg", ImreadModes.Color);
Mat gray = new Mat();
Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);

Mat binary = new Mat();
Cv2.Threshold(gray, binary, 127, 255, ThresholdTypes.Binary);

Point[][] contours;
HierarchyIndex[] hierarchy;
Cv2.FindContours(
    image: binary,
    contours: out contours,
    hierarchy: out hierarchy,
    mode: RetrievalModes.Tree,
    method: ContourApproximationModes.ApproxSimple
);

// 绘制所有轮廓
Mat result = src.Clone();
Cv2.DrawContours(
    image: result,
    contours: contours,
    contourIdx: -1,  // -1表示绘制所有轮廓
    color: new Scalar(0, 255, 0),
    thickness: 2
);

Cv2.ImShow("Contours", result);
Cv2.WaitKey(0);

关键注意事项

for (int i = 0; i < contours.Length; i++)
{
    if (hierarchy[i].Parent == -1) // 顶级轮廓
    {
        int childIdx = hierarchy[i].FirstChild;
        while (childIdx != -1)
        {
            // 处理子轮廓
            childIdx = hierarchy[childIdx].Next;
        }
    }
}

三、 常见问题

四、资料

技能拾荒者《93-OpenCVSharp —- Cv2.FindContours()函数功能(轮廓检测,轮廓的层次结构)详解》
https://blog.csdn.net/weixin_45590420/article/details/145905519

上一篇 下一篇

猜你喜欢

热点阅读