我正在尝试使用EmguCV中的蛇活动轮廓,但我什么也没做。这是我的代码:

     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);


我做错了吗?

最佳答案

您会错过绘制初始化点的机会。

我已经为您和整个社区设置了一些代码,因为那里没有emgu蛇示例。

        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;
        }
    }


希望这会有所帮助,只需更改一些参数,您将对结果感到惊讶。

关于c# - EmguCV蛇功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22699901/

10-10 14:52