GetSubRect (ROI) .Convert() выдает исключение - PullRequest
0 голосов
/ 23 марта 2012

Я написал код для выбора области из картинки Kinect (см. Ниже).Эта область должна быть определена как ROI объекта на картинке.Выбор области работает, но в строке

Image<Bgr, Byte> roiImage = HandImage1.GetSubRect(roi).Convert<Bgr, Byte>();

программа выдает исключение, кроме того, следующая строка не принимается компилятором, из-за чего я не знаю, зависит ли это от правильного синтаксиса строкираньше.

Кто-нибудь знает, что происходит?

private List<MCvBox2D> ProcessHandContoursCheck(Image<Bgr, Byte> IntoImage, Contour<Point> Contours, int MinArea, Point ClickedLocation, Image<Gray, Byte> HandImage1)
    {

        List<Point> centers1 = new List<Point>();                                    
        List<MCvBox2D> minRects1 = new List<MCvBox2D>();                             

        double GrenzeX;
        double GrenzeY;


        while (Contours != null)                                                    
        {

                MCvBox2D minRect = Contours.GetMinAreaRect();                       
                if (Contours.Area >= MinArea)                                       
                {


                    centers1.Add(new Point((int)minRect.center.X, (int)minRect.center.Y)); minRects1.Add(minRect);                                               

                    if (!checkAreaExistanz(Contours.Area))
                           AreaVolumeHand.Add(Contours.Area);                                

                    if (ClickedLocation.X > minRect.center.X)
                        GrenzeX = ClickedLocation.X - minRect.center.X;
                    else
                        GrenzeX = minRect.center.X - ClickedLocation.X;

                    if (ClickedLocation.Y > minRect.center.Y)
                        GrenzeY = ClickedLocation.Y - minRect.center.Y;
                    else
                        GrenzeY = minRect.center.Y - ClickedLocation.Y;


                    DangerB.X= ((int)minRect.center.X - (int)GrenzeX);

                    DangerB.Y = (int)minRect.center.Y - (int)GrenzeY;


                    DangerB.Height= (int)minRect.size.Width + (int)GrenzeX;
                    DangerB.Width = (int)minRect.size.Height+ (int)GrenzeY;


                     Rectangle roi = new Rectangle((int)minRect.center.X - (int)GrenzeX, (int)minRect.center.Y - (int)(GrenzeY), (int)minRect.size.Height + (int)GrenzeY, (int)minRect.size.Width + (int)GrenzeX);




                    Image<Bgr, Byte> roiImage = HandImage1.GetSubRect(roi).Convert<Bgr, Byte>(); //<-----------------------


                    IntoImage.Draw(roiImage, new Bgr(Color.Blue), 2);                            // <----------------------- 

                    // Alternative???

                     Size estimatedSize = new Size((int)minRect.size.Width + (int)GrenzeX, (int)minRect.size.Height + (int)GrenzeY);

                     PointF estimatedCenter = new PointF((float)((int)minRect.center.X - (int)GrenzeX), (float)((int)minRect.center.Y - (int)GrenzeY));


                     Rectangle boostedROI = new MCvBox2D(estimatedCenter, estimatedSize, 0).MinAreaRect();


                     boostedROI.X += DangerB.X;
                     boostedROI.Y += DangerB.Y;

                     IntoImage.Draw(boostedROI, new Bgr(Color.Blue), 2);          


                }

            Contours = Contours.HNext;
        }
        return minRects1;
}

1 Ответ

0 голосов
/ 03 мая 2012

Как я знаю, вам нужно использовать свойство HandImage1.ROI вместо HandImage1.GetSubRect(roi).

Например

 Rectangle roi = new Rectangle((int)minRect.center.X - (int)GrenzeX, (int)minRect.center.Y - (int)(GrenzeY), (int)minRect.size.Height + (int)GrenzeY, (int)minRect.size.Width + (int)GrenzeX);
 Image<Bgr, Byte> roiImage = HandImage1.Convert<Bgr, Byte>();
 roiImage.ROI=roi;
...