Я написал код для выбора области из картинки 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;
}