问题描述:

I am trying to use snake active contour from EmguCV ,but i don't take anything.Here is my code:

 Image<Gray, Byte> img = new Image<Gray, Byte>(300, 300, new Gray());

Point center = new Point(100, 100);

double width = 20;

double height = 40;

Rectangle rect = new Rectangle(center, new Size(20, 20));

img.Draw(rect, new Gray(255.0), -1);

using (MemStorage stor = new MemStorage())

{

Seq<Point> pts = new Seq<Point>((int)SEQ_TYPE.CV_SEQ_POLYGON, stor);

pts.Push(new Point(20, 20));

pts.Push(new Point(20, 280));

pts.Push(new Point(280, 280));

pts.Push(new Point(280, 20));

//Image<Gray, Byte> canny = img.Canny(100.0, 40.0);

Seq<Point> snake = img.Snake(pts, 0.1f, 0.5f, 0.4f, new Size(21, 21), new MCvTermCriteria(500, 0.1), stor);

img.Draw(pts, new Gray(120), 1);

img.Draw(snake, new Gray(80), 2);

What i am doing wrong?Any idea?

网友答案:

you miss to draw your initialization points.

I have setup some code for you and for the whole community as there are no emgu snakes sample out there.

        private void TestSnake()
    {
        Image<Gray, Byte> grayImg = new Image<Gray, Byte>(400, 400, new Gray());
        Image<Bgr, Byte> img = new Image<Bgr, Byte>(400, 400, new Bgr(255,255,255));

        // draw an outer circle on gray image
        grayImg.Draw(new Ellipse(new PointF(200,200),new SizeF(100,100),0), new Gray(255.0), -1);
        // inner circle on gray image to create a donut shape :-)
        grayImg.Draw(new Ellipse(new PointF(200, 200), new SizeF(50, 50), 0), new Gray(0), -1);

        // this is the center point we'll use to initialize our contour points
        Point center = new Point(200, 200);
        // radius of polar points
        double radius = 70;

        using (MemStorage stor = new MemStorage())
        {

            Seq<Point> pts = new Seq<Point>((int)Emgu.CV.CvEnum.SEQ_TYPE.CV_SEQ_POLYGON, stor);                
            int numPoint = 100;
            for (int i = 0; i < numPoint; i++)
            {   // let's have some fun with polar coordinates                                
                Point pt = new Point((int)(center.X + (radius * Math.Cos(2 * Math.PI * i / numPoint))), (int)(center.Y + (radius * Math.Sin(2 * Math.PI * i / numPoint))) );
                pts.Push(pt);                                            
            }
            // draw contour points on result image
            img.Draw(pts, new Bgr(Color.Green), 2);
            // compute snakes                                
            Seq<Point> snake = grayImg.Snake(pts, 1.0f, 1.0f, 1.0f, new Size(21, 21), new MCvTermCriteria(100, 0.0002), stor);
            // draw snake result
            img.Draw(snake, new Bgr(Color.Yellow), 2);

            // use for display in a winform sample
            imageBox1.Image = grayImg;
            imageBox2.Image = img;
        }
    }

Hope this helps, just change some params and you will be surprised of result.

相关阅读:
Top