2015-01-04 138 views
2

我正在使用OpenCV和Python進行三維圖像處理。把二維數組中的三維世界座標

我可以從兩個圖像(左側和右側)的世界座標(X,Y,Z)兩點製作。

對於我剩餘的程序: 有一個二維數組對應於左(或右)圖像像素是很重要的。

他需要識別正常2D圖像中的對象。當完成時,給出建立對象的x,y,z世界座標。他確實給這個圖像的(x,y)用這個(x,y)得到x,y,z世界座標。

我的問題是:是否有一個特殊的功能,或者我該怎麼做?

+0

我不明白你的問題 - 有兩個圖像,你需要一個函數,它會在第一個圖像(X,Y)中找到一個對象,並使用它從不同角度的圖像中找到Z座標?這些是什麼樣的圖像? – MackM 2015-01-05 17:35:50

+0

我在建築物內進行線路檢測;我有一臺3D相機,因此我找到了這條線。僅用於應用程序,我需要一個二維數組,因此對於我找到的像素位置,我想查看二維數組中的x,y,z點。 – 2015-01-05 19:05:26

回答

0

你要使用此功能的差異的計算:

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

當你想用3D的陣列指向你需要使用此功能,輸出的是大小相同的圖片。在每一個像素,你看到的x,y,z位置:

points = cv2.reprojectImageTo3D(disp, Q) 

如果你選擇了一個點,他給出了一個怪異的回報或沒有,那麼就沒有斧頭,Y,Z位置供的那點課程。

0

如果你想使用GLM你可以試試這個:

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

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

在Linux中,你可以用apt-get安裝libglm-dev的

但你當然,你可以只創建一個點上安裝GLM struct/class並使用它。

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;