Kinect虚拟试衣间开发(4)-2D衣物试穿
来源:互联网 发布:迅雷修改源码去广告 编辑:程序博客网 时间:2024/04/29 04:27
衣物试穿是虚拟试衣间关键部分,可以分为两部分实现,一个是把现实中的人体坐标转换为屏幕坐标,二是根据骨骼宽和高调整衣物大小,并把前面获取的人体屏幕坐标赋给衣物位置坐标
- 显示衣物的image控件
<Image x:Name="clth" Source="FDress/d8.png" HorizontalAlignment="Left" Visibility="Hidden" Width="Auto" Height="Auto" Margin="396,279,0,0" VerticalAlignment="Top" Grid.Column="1" Grid.RowSpan="2" />
- 转换到屏幕坐标
/// <summary> /// 转换骨骼坐标到彩色坐标,再到屏幕坐标 /// </summary> /// <param name="joint">关节点</param> /// <returns>返回屏幕点</returns> public Point getJointScreenPoint(Joint joint) { //将body point转换为 color point ColorSpacePoint colorPoint = this.kinectSensor.CoordinateMapper.MapCameraPointToColorSpace(joint.Position); //将color point 变为 屏幕坐标点,数字是包含彩图image的Grid的长宽 double X =(colorPoint.X / colorFrameDescription.Width) * 1357; double Y =( colorPoint.Y / colorFrameDescription.Height) * 735; Point point = new Point(X, Y); return point; }
- 调整图片大小
/// <summary> /// 调整图片大小 /// </summary> /// <param name="body">身体</param> /// <returns></returns> public void changeSize(Body body) { double shoulderwidth = Math.Abs(getJointScreenPoint(body.Joints[JointType.ShoulderLeft]).X - getJointScreenPoint(body.Joints[JointType.ShoulderRight]).X); double width = 3 * shoulderwidth ; double height = 3 * shoulderwidth ; //贴图左肩与图的padding double x = getJointScreenPoint(body.Joints[JointType.ShoulderLeft]).X * shoulderwidth / 200; double y = getJointScreenPoint(body.Joints[JointType.ShoulderLeft]).Y * shoulderwidth / 200; double x1 = getJointScreenPoint(body.Joints[JointType.ShoulderLeft]).X-0.3*width; double y1 = getJointScreenPoint(body.Joints[JointType.ShoulderLeft]).Y-0.17*height; try { clth.Width = width; clth.Height = height; clth.Margin = new Thickness(x1, y1, 0, 0); }catch(ArgumentException e) { } }
- 调用changeSize函数
在Reader_multiSourceFrameArrived中
using (BodyFrame bodyFrame = multiSourceFrame.BodyFrameReference.AcquireFrame()) { if (bodyFrame != null) { if (this.bodies == null) bodies = new Body[bodyFrame.BodyCount]; //return bodies to a list bodyFrame.GetAndRefreshBodyData(this.bodies); Body thebody = bodies[0]; foreach (Body body in this.bodies) { //多个人在屏幕前时,选择最近的那一个 if (body.IsTracked) { if (thebody.Joints[JointType.SpineBase].Position.Z == 0) thebody = body; else if (thebody.Joints[JointType.SpineBase].Position.Z > body.Joints[JointType.SpineBase].Position.Z) thebody = body; changeSize(thebody); } } } } }
阅读全文
0 0
- Kinect虚拟试衣间开发(4)-2D衣物试穿
- Kinect虚拟试衣间开发(1)-显示colorFrame图像
- Kinect虚拟试衣间开发(3)-拍照和声控功能
- Kinect虚拟试衣间开发(5)-动作识别
- Kinect虚拟试衣间开发(2)-Hand Point Gesture,手掌交互部分
- Kinect虚拟试衣
- 基于HTML5实现的在线3D虚拟试衣系统(试衣间)解决方案
- 网络虚拟试衣间受白领追捧
- 【Unreal Engine 4】虚拟试衣镜
- Kinect 3D人体扫描技术:合身衣物从此轻松选购
- 创意01:网上3D试衣间
- 3d试衣
- 电商新潮流:eBay将推虚拟试穿技术
- 试衣间测试
- 试衣间问题
- 试衣间协议
- 试衣间草稿
- 试衣间的经验总结
- php 问卷调查结果统计
- Android卡顿问题分析方法
- windows查看端口占用以及关闭相应的进程
- PAT基础题 5-1 厘米换算英尺英寸
- 父job success,子job 都是no run
- Kinect虚拟试衣间开发(4)-2D衣物试穿
- 网站大全
- 从底层开始了解hashmap
- 2017多校联合第6次hdu6105Gameia
- git学习笔记整理-8-别名
- Hadoop快速入门
- java基础之Integer包装类
- DIV+CSS中让布局居中_背景图片居中_文字内容居中
- ORACLE存储过程两个注意点