2012-07-23 2 views
1

비슷한 질문을했지만 여전히 붙어 있습니다.RGBDemo에 대한 마우스 위치 좌표 가져 오기

kinect를 사용하여 재구성 된 3D 장면을 클릭하면 마우스의 x, yz 좌표를 줄 수있는 작은 코드 섹션을 작성하려고합니다. 내 목표는 로봇 팔을위한 '이동'기능을 만드는 것입니다.

윈도우 프레임에서 마우스 xy 위치를 찾은 다음 장면의 프레임이되기 전에 화면의 프레임으로 변환해야한다고 생각합니다. 이게 옳은 거니? 또한 픽셀에서 깊이 값을 읽는 방법을 알아낼 수 없습니까?

저는 Visual Studio 및 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

당신이 RGBDemo를 사용하는 경우, 당신에게 그 정보를 제공합니다보다 RGBImage의 방법이있다. 먼저 2D 이미지에서 2D 심도 이미지로 점을 매핑해야합니다 (이미지가있는 경우 해당 좌표로 cv :: Point pt를 작성하십시오.) 그러면 ntk :: RGBDImage에서 다음 함수를 호출 할 수 있습니다.

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

이 점은 3D 세계 좌표 포함 (확실하지하지만 난 그게 미터에 생각)

가 도움이 희망!

관련 문제