C++ 在Kinec图片C+中检测手与物体的接触+;
首先:我是通过微软Visual Studio编程Kinec的新手。。。如果我的问题有点愚蠢,那么很抱歉 我想检测我的手是否接触到象限的上部;为此,我计划:C++ 在Kinec图片C+中检测手与物体的接触+;,c++,kinect,C++,Kinect,首先:我是通过微软Visual Studio编程Kinec的新手。。。如果我的问题有点愚蠢,那么很抱歉 我想检测我的手是否接触到象限的上部;为此,我计划: Image<Gray, Byte> HandImage = GetThresholdedImage(ref bgrImage, (int)hueHand); Image<Gray, Byte> depthImageBin = depthImage.ThresholdBinary(new Gray(30), new Gr
Image<Gray, Byte> HandImage = GetThresholdedImage(ref bgrImage, (int)hueHand);
Image<Gray, Byte> depthImageBin = depthImage.ThresholdBinary(new Gray(30), new Gray(255));
List<MCvBox2D> DangerAreas = new List<MCvBox2D>();
List<MCvBox2D> HandAreas = new List<MCvBox2D>();
// build list of object rectangles
DangerAreas = ProcessObjectContours(bgrImage, contoursDepthObjects, contoursHand, objectSize);
// build list of hand rectangles
HandAreas = ProcessHandContours(bgrImage, contoursHand, contoursDepthObjects, handSize);
但是在这种形式下,由于错误,不接受
匹配形状。所以有两个问题:当我的手触碰危险区域时,这是正确的检测方法吗?如果是,如何正确处理方法匹配形状?我要做的是研究碰撞检测算法。
您可以很容易地获得手的位置,并将其转换为相对于矩形所在容器的2D点,然后获得危险区域矩形的2D点。然后,只需确定手点是否位于矩形点的顶部(或半径内)
要获取相对于栅格的骨架位置,所有图元都位于:
private static Point GetPosition2DLocation(SkeletonPoint position, Grid skeletonCanvas, DepthImageFrame depthFrame)
{
DepthImagePoint depthPoint = depthFrame.MapFromSkeletonPoint(position);
return new Point(
(int)(skeletonCanvas.ActualWidth * depthPoint.X / depthFrame.Width),
(int)(skeletonCanvas.ActualHeight * depthPoint.Y / depthFrame.Height)
);
}
要检查两点是否相交(半径为70以内),请执行以下操作:
私有静态布尔点筛选(点项1,点项2)
{
//为中心指定半径,以便碰撞不必精确。
//待办事项可配置
常数int半径=70;
//将距离与组合半径进行比较
双dx=item2.X-item1.X;
双dy=item2.Y-item1.Y;
常数int半径=半径+半径;
如果((dx*dx)+(dy*dy)<半径*半径)
{
返回true;
}
返回false;
}
希望这是有意义的。我要做的就是研究碰撞检测算法。
您可以很容易地获得手的位置,并将其转换为相对于矩形所在容器的2D点,然后获得危险区域矩形的2D点。然后,只需确定手点是否位于矩形点的顶部(或半径内)
要获取相对于栅格的骨架位置,所有图元都位于:
private static Point GetPosition2DLocation(SkeletonPoint position, Grid skeletonCanvas, DepthImageFrame depthFrame)
{
DepthImagePoint depthPoint = depthFrame.MapFromSkeletonPoint(position);
return new Point(
(int)(skeletonCanvas.ActualWidth * depthPoint.X / depthFrame.Width),
(int)(skeletonCanvas.ActualHeight * depthPoint.Y / depthFrame.Height)
);
}
要检查两点是否相交(半径为70以内),请执行以下操作:
私有静态布尔点筛选(点项1,点项2)
{
//为中心指定半径,以便碰撞不必精确。
//待办事项可配置
常数int半径=70;
//将距离与组合半径进行比较
双dx=item2.X-item1.X;
双dy=item2.Y-item1.Y;
常数int半径=半径+半径;
如果((dx*dx)+(dy*dy)<半径*半径)
{
返回true;
}
返回false;
}
希望这有意义。我允许自己“翻译”一点源代码。我允许自己“翻译”一点源代码。
private static bool PointsIntersecting(Point item1, Point item2)
{
//Give the center a radius so that collision does not have to be exact.
//TODO configurable
const int radius = 70;
//compare the distance to combined radii
double dx = item2.X - item1.X;
double dy = item2.Y - item1.Y;
const int radii = radius + radius;
if ((dx * dx) + (dy * dy) < radii * radii)
{
return true;
}
return false;
}