2015-01-04 13 views
2

OpenCV 및 Python을 사용하여 3D 이미지 처리 작업을하고 있습니다.2D 배열에 3D 세계 좌표 입력

두 이미지의 두 지점 (왼쪽 및 오른쪽)에서 월드 좌표 (X, Y, Z)를 만들 수 있습니다.

남은 프로그램 : 왼쪽 (또는 오른쪽) 이미지 픽셀에 해당하는 2D 배열을 갖는 것이 중요합니다.

일반 2D 이미지에서 물체를 인식해야합니다. 그것이 완료되면 x, y, z 좌표로 설정된 객체의 세계 좌표를 제공합니다. 이것은 그가이 (x, y)가있는 이미지 en의 (x, y)에 x, y, z 좌표를주는 것입니다.

내 질문은 : 특수 기능이 있습니까, 아니면 어떻게 할 수 있습니까? 당신은 GLM을 사용하려면

+0

두 이미지가 있습니다. 첫 번째 이미지 (X, Y)에있는 객체를 찾고 다른 각도의 이미지에서 Z 좌표를 찾는 함수가 필요합니까? 어떤 종류의 이미지입니까? – MackM

+0

건물에서 선 감지를하고 있습니다. 3D 카메라가있어 이미지를 왼쪽에 놓았습니다. 응용 프로그램에 대해서만 2D 배열이 필요하므로 픽셀 위치에 대해 x, y, z 점에 대해 2D 배열을보고 싶습니다. –

답변

0

당신은 격차의 계산이 기능을 사용해야은 :

disp = stereo.compute(imgL, imgR).astype(np.float32)/16.0 

당신은 3D와 배열이 기능을 사용할 필요가 지적하고자, 출력은 같은 크기 당신의 영상.

points = cv2.reprojectImageTo3D(disp, Q) 

당신이 포인트를 선택하고 그 이상한 반환 또는 아무것도를 제공하면, 그 시점에 사용할 수 도끼, Y, Z 위치가되지 않습니다 : 모든 픽셀에서 당신은 X, Y, Z 위치를 참조 코스.

0

이 시도 할 수 있습니다 :

glm::vec3 array[image_resolution_y][image_resolution_x]; 

array[0][0][0] = x; 
array[0][0][1] = y; 
array[0][0][2] = z; 

리눅스에서 당신은 apt-get을 설치 libglm-DEV

하지만 당신 물론 그냥 만들 수있는 점과 GLM를 설치할 수 있습니다 구조체/클래스 및이 사용하십시오.

struct Point3D 
{ 
float x; 
float y; 
float z; 
}; 

Point3D array [image_resolution_y][image_resolution_x]; 
array[0][0].x = x; 
array[0][0].y = y; 
array[0][0].z = z;