获取RGBDemo的鼠标位置坐标

时间:2012-07-23 11:10:28

标签: c++ visual-studio-2010 position mouse coordinates

我意识到已经提出了一些类似的问题,但我仍然被卡住了。

我正在尝试编写一小段代码,当点击使用kinect重建的3D场景时,该代码将给出鼠标的x,yz协调。我的目标是为机器人手臂创建一个“转到”功能。

我想我需要在窗口框架中找到鼠标xy位置,然后在最终场景框架之前将其转换为屏幕框架。这是正确的吗?另外我无法弄清楚如何从像素中读取深度值?

我是视觉工作室和c ++编程的新手,我正在努力编写正确的代码。我不确定是否应该创建一个新类并将其包含在内,或者只是将其直接插入到查看器项目中。

这是我写的,但我确信它需要改变。

任何帮助都会受到大力赞赏。

托比

void get_point_position_MOUSE(int event, int x, int y, int flags,
    void* depthMapZ) {
if (CV_EVENT_LBUTTONDOWN == event) {
    if (DISP_IMAGE_DEPTH != IPL_DEPTH_32F) {
        write_on_buffer(
                g_strdup_printf(
                        "This only supports IPL_DEPTH_32F images.\n"));
        return;
    }
    if (selectionMode != POINT_SEL_MODE_MOUSE) {
        write_on_buffer(g_strdup_printf("X: %f Y: %f\n", (float) x,
                (float) y));
        CvPoint3D32f points = getWorldCo_Ords((float) x, (float) y,
                (float) CV_IMAGE_ELEM((IplImage*) disparityMap, int, y, x));
        write_on_buffer(g_strdup_printf("X: %f Y: %f Z: %f\n", points.x,
                points.y,
                (float) CV_IMAGE_ELEM((IplImage*) disparityMap, int, y, x)));
        return;
    }

1 个答案:

答案 0 :(得分:1)

如果您使用RGBDemo,RGBImage中的方法比给您提供信息。 首先,您需要将点从2D图像映射到2D深度图像(如果您的图像已经存在并创建带有这些坐标的cv :: Point pt)。 然后从ntk :: RGBDImage中调用函数:

cv::Point3f p3f = rgbdimage->calibration()->depth_pose->unprojectFromImage(pt, rgbdimage->depth()(pt));

此点包含世界的3D坐标(不确定,但我认为它以米为单位)

希望它有所帮助!