Как отобразить SkeletonStream на DepthStream или ColorStream Kinect Wpf

Я хотел бы знать, как наложить два объекта изображения в Wpf. Я сделал два потока, которые выводят видео, один для костей, а другой просто обычное видео. Теперь я хотел бы сложить их вместе, чтобы скелет отображался на цветном видео. Часть моего кода XAML

<Grid Name="layoutGrid">
    <Grid Name="VideoGrid" ClipToBounds="True" Background="AliceBlue">
        <Image Name="ColorImage" Width="640" Height="480"/>
        <Image Name="SkeletalImage" Width="640" Height="480"/>

        <Canvas Background="Transparent"/>
    </Grid>
    <StatusBar VerticalAlignment="Bottom" HorizontalAlignment="Center">
        <Button Name="Button1" Content="Skeleton Only" Width="120"/>
    </StatusBar>
</Grid>

Когда я это делаю, отображается только изображение скелета, и если я переключаю оба изображения, отображается цветное изображение. Кажется, что фон Canvas не помогает (чтобы сделать черную часть скелетного изображения прозрачной)


person Paktwis Homayun    schedule 26.10.2013    source источник


Ответы (3)


Я думал, что проблема была в моем коде XAML, но на самом деле она заключалась в рисовании прозрачного фона для установки размера рендеринга. Фон для изображения скелета был черным

dc.DrawRectangle(Brushes.Black, null, 
                  new Rect(0.0, 0.0, RenderWidth, RenderHeight));

вместо прозрачного

dc.DrawRectangle(Brushes.Transparent, null, 
                  new Rect(0.0, 0.0, RenderWidth, RenderHeight));

это исправило мою проблему. Спасибо хоть

person Paktwis Homayun    schedule 28.10.2013

Я пытался наложить Skeletal на цвет или глубину на холсте, но ничего не вышло. Вместо этого, когда я смотрел пример приложения Kinect Explorer в SDK 1.6.0, они накладывались с помощью сетки. К сожалению, я еще не очень многому научился, но они использовали сетку для цвета и глубины и холст для отслеживания скелета. Я могу опубликовать фрагмент, если это поможет. Удачи!

person CAP_Cadet    schedule 27.10.2013

Вы задаете в основном два разных вопроса: 1) Как отобразить SkeletonStream в DepthStream, что очень просто, 2) Как отобразить SkeletonStream в ColorStream, что все еще просто, но немного сложнее.

Ответ на вопрос 1) Векторы XYZ суставов в скелетных потоках находятся в той же системе координат, что и поток глубины. Таким образом, если вы рисуете Deapth Stream в виде квадратичной сетки, используя фокусное расстояние камеры глубины из Kinect SDK, вы можете построить скелет в виде линейного графика в той же системе координат. Исходный код, реализующий именно то, что вы хотите сделать в OpenGL, доступен здесь это даст вам представление о том, как реализовать это в wpf.

Ответ на вопрос 2) Видеокамера имеет другое поле зрения, чем камера глубины. Чтобы отобразить поток скелета в ColorStream, вам нужно сначала сопоставить векторы XYZ суставов в потоках скелета с системой координат потока глубины, а затем нарисовать сначала видеокадр на заднем плане и скелет в виде линейного графика на графике. фронт. Вы можете легко выполнить сопоставление, используя координаты текстуры U-V, предоставленные Kinect SDK. Узнайте, как получить UV здесь.

person Angelos B    schedule 27.10.2013