这是一个非常简单的问题,但我是Python的新手,我似乎无法实现它。
我想将Python中的Skeleton数据坐标(PyKinect)转换为Points(X,Y)。我知道类似的任务可以通过C#(使用Microsoft.Kinect
库)实现,如下面的代码:
var p = new Point[6];
Point shoulderRight = new Point(), shoulderLeft = new Point();
foreach (Joint j in data.Joints)
{
switch (j.ID)
{
case JointID.HandLeft:
p[0] = new Point(j.Position.X, j.Position.Y);
// ...
在Python中(使用PyKinect),我能够获取数据对象:
for index, data in enumerate(skeletons):
p2 = data.SkeletonPositions[JointId.wrist_left] #test left wrist joint data object
print ('p2', p2)
输出结果为:
('p2', <x=-0.5478253364562988, y=-0.5376561880111694, z=1.7154035568237305, w=1.0>)
但是,我似乎无法将其转换为Point(X,Y)
格式。我是否需要使用NumPy或其他一些外部Python库?任何建议都会非常感激。
答案 0 :(得分:0)
您可以使用regex
来提取值,我不确定这是否是您要查找的内容,但请尝试以下操作:
import re
p2 = "<x=-0.5478253364562988, y=-0.5376561880111694, z=1.7154035568237305, w=1.0>"
p2 = re.findall("-?\d+.\d+",p2)
p2_xy = p2[0],p2[1]
print ("p2",p2_xy)
输出:
('ps', ('-0.5478253364562988', '-0.5376561880111694'))
或者如果你想要一个更清洁的版本:
import re
p2 = "<x=-0.5478253364562988, y=-0.5376561880111694, z=1.7154035568237305, w=1.0>"
p2 = re.findall("-?\d+.\d+",p2)
print ("p2",p2[0],p2[1])
输出:
('p2', '-0.5478253364562988', '-0.5376561880111694')