2015-01-04 49 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;