Localização de casco convexo Opencv-ConvexHull (C#)

Conceito de casco convexo:

O menor polígono convexo contendo todos os pontos no conjunto de pontos S é chamado de casco convexo
Insira a descrição da imagem aqui

API

public static Point[] ConvexHull(IEnumerable<Point> points, bool clockwise = false);

Parâmetros:
pontos: o contorno encontrado
sentido horário: indica a direção do casco convexo, verdadeiro sentido horário ou falso sentido anti-horário
Resultado do retorno: o casco convexo encontrado

Demonstração

private Mat inputMat;
private Mat outMat;
private Mat displayMat;

if (fileDialog.ShowDialog() == DialogResult.OK)
{
    
    
    picFile = fileDialog.FileName;
    inputMat = Cv2.ImRead(picFile, ImreadModes.Grayscale);
    displayMat = Cv2.ImRead(picFile, ImreadModes.AnyColor);
    outMat = new Mat(new Size(inputMat.Cols, inputMat.Rows), inputMat.Type());

    //二值化
    Cv2.Threshold(inputMat, outMat, 232, 255, ThresholdTypes.BinaryInv);

    //查找轮廓
    Cv2.FindContours(outMat, out OpenCvSharp.Point[][] contours, out HierarchyIndex[] outputArray, RetrievalModes.External, ContourApproximationModes.ApproxNone);

    //根据轮廓大小建立凸包
    Point[][] hull = new Point[contours.Length][];

    for (int i = 0; i < contours.Length; i++)
    {
    
    
        //查找凸包
        hull[i] = Cv2.ConvexHull(contours[i], false);
    }


    Scalar color = new Scalar(0, 0, 255);
    for (int i = 0; i < hull.Length; i++) //contours.Length
    {
    
    
        //绘制凸包
        Cv2.DrawContours(displayMat, hull, (int)i, color, 3, LineTypes.Link8, outputArray, 2);
    }

    picBox_Display.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(inputMat);
    picBox_After.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(displayMat);


}

Insira a descrição da imagem aqui

Notas adicionais:
A biblioteca OpenCV usada no .NET neste caso é OpenCvSharp4

Biblioteca OpenCv para ambiente .NET

Acho que você gosta

Origin blog.csdn.net/weixin_40671962/article/details/127562218
Recomendado
Clasificación