0

私はカラートラッキングに取り組んでいます。具体的には、オレンジ色のボール、おそらくバスケットボールのボール、そして体のkinectを追跡しており、フリースローのシューティングガイドを作成しています。これが私の場合です

私はすでに画像をしきい値処理し、ノイズやその他の重要でないオブジェクト(ボール以外)を除去するために画像を侵食し、ボールを強調するために数回拡張しました。これで、最終的なバイナリ画像に到達しました。ボールを正常に分離しました..他のブロブがあります..(ボールではない小さなブロブ)..最大のブロブ(ボール)を取得してバウンディングボックスを配置するにはどうすればよいですか?

私はハフサークルを試しましたが、これは非常に遅いです、、..ありがとう!いくつかのコードが役立つでしょう

4

1 に答える 1

2

これは、画像で最大のブロブを取得するために使用したコードです。

public static Blob FindLargestObject(Image<Gray, byte> block, Rectangle rectangle)
    {
        Image<Gray, byte> mask = block.CopyBlank();

        Contour<Point> largestContour = null;
        double largestarea = 0;

        for (var contours = block.FindContours(CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE,
            RETR_TYPE.CV_RETR_EXTERNAL); contours != null; contours = contours.HNext)
        {
            if (contours.Area > largestarea)
            {
                largestarea = contours.Area;
                largestContour = contours;
            }
        }

        // fill the largest contour
        mask.Draw(largestContour, new Gray(255), -1);

        return new Blob(mask, largestContour, rectangle);
    }

Blobの場合:

public class Blob 
{
    Image<Gray,byte> Mask{ get; set; }
    Contour<Point> Contour { get; set; }
    Rectangle Rectangle { get; set; }
}

ブロブには、取得したいすべての情報が含まれます。

于 2013-03-03T16:02:44.923 に答える