1

ウェブカメラの前に円をかざすと円を検出するプログラムを作成しようとしています。円検出が画像に対してどのように機能するかは知っていますが、次のコードを使用して Web カメラ ストリームで機能させる方法がわかりません。

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        ImageViewer viewer = new ImageViewer(); //create an image viewer
        Capture capture = new Capture(); //create a camera capture
        Application.Idle += new EventHandler(delegate(object sender, EventArgs e)
        {  //run this until application closed (close button click on image viewer)
            Image<Bgr, Byte> image = capture.QueryFrame();
            //MemStorage storage = new MemStorage();
            //Contour<Point> contours = image.FindContours();
           //Contour<Point> currentContour = contours.ApproxPoly(contours.Perimeter * 0.05, storage);
            viewer.Image = image; //draw the image obtained from camera
        });
        viewer.ShowDialog(); //show the image viewer
}

ご覧のとおり、最も内側のループで FindContours を使用してみましたが、実行しようとするとプログラムがフリーズするので、その部分をコメントアウトしました。ウェブカメラを使用してサークル検出を実装する方法を誰か教えてもらえますか?

4

1 に答える 1

0

HoughCircleメソッドを円検出に使用できます


Image gray = img.Convert().PyrDown().PyrUp();

Gray cannyThreshold = new Gray(180);
Gray cannyThresholdLinking = new Gray(120);
Gray circleAccumulatorThreshold = new Gray(120);

CircleF[] circles = gray.HoughCircles(
    cannyThreshold,
    circleAccumulatorThreshold,
    5.0, //Resolution of the accumulator used to detect centers of the circles
    10.0, //min distance 
    5, //min radius
    0 //max radius
    )[0]; //Get the circles from the first channel

メソッドを参照HoughCircle

于 2012-09-24T05:38:43.330 に答える