如何从存储在.csv文件中的3D对象创建相机显示的图像?

可可

我在csv文件中存储了房屋的3D图像。我想知道f = 400像素,640 x 480的相机如何拍摄不同姿势的照片。我可以在csv(第一张图片)中显示该图片,但我想获得类似于第二张图片的图片。

import pandas as pd
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


#load data
data1 = pd.read_csv('house.csv',sep=' ')
x = data1.drop(data1.columns[[0,2,3]], axis=1)
y = data1.drop(data1.columns[[0,1,3]], axis=1)
z = data1.drop(data1.columns[[1,2,3]], axis=1)

fig = plt.figure()
ax1 = fig.add_subplot(111,projection='3d')
# Hide grid lines
plt.grid(b=None)
ax1.scatter(x,y,z)
plt.axis('off')
plt.savefig('house.png')

这是我的图像:

在此处输入图片说明

在此处输入图片说明

克里斯多夫·拉克维兹

这是计算机图形问题。它涉及矩阵乘法以转换这些点,直到它们在图像平面上。我建议您查找一些基本的计算机图形数学(例如OpenGL)。

OpenCV具有诸如cv :: projectPoints()之类的过程来为您处理其中一些步骤。但是,它不是计算机图形库。

我将为您简要介绍所涉及的数学:

首先,您需要平移和旋转矩阵来使摄像机在场景中移动。这些矩阵都是4x4,您的3D点将表示为(x,y,z,1)向量。多余的坐标使翻译(以及更多)成为可能。您将矩阵相乘为一,然后将此一应用于您的点。这种转换将所有点从世界空间移到摄影机空间(摄影机周围的空间移动)。

+ Z中5个单位的简单翻译为:

>>> T = np.eye(4)
>>> T[0:3,3] = (0, 0, +5)
>>> T
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 5.],
       [0., 0., 0., 1.]])

同质化:检查您的点数最后是否仍为1。如果不是,则将点/矢量除以第四坐标中的值。“点”是任何w的所有向量(x,y,z,1)* w,而(x,y,z,1)是规范表示。

现在是投影矩阵。计算机图形学也在这里使用4x4矩阵,但是我对这种表述没有经验。相反,我将使用OpenCV中常用的3x3矩阵。它会将您的点作为相机空间中的(x,y,z)向量,并在屏幕空间中输出(x,y,1)* w向量(是,再次均化)。

640x480摄像机和60度水平视场的摄像机矩阵为:

>>> M = np.eye(3)
>>> M[0:2,2] = (640/2, 480/2)
>>> M[0,0] = M[1,1] = (640/2) / atan(60/2 * pi/180)
>>> M
array([[663.42156,   0.     , 320.     ],
       [  0.     , 663.42156, 240.     ],
       [  0.     ,   0.     ,   1.     ]])

现在,您的点已在屏幕坐标中。单独画点或在点之间画线。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建存储过程

来自分类Dev

对象如何存储在堆中?

来自分类Dev

如何导入3D对象文件以在SDL中旋转

来自分类Dev

会话存储:如何存储多个对象

来自分类Dev

如何在Unity 3d的场景中显示相机?

来自分类Dev

git如何存储重复文件?

来自分类Dev

如何存储已上传的图像。

来自分类Dev

如何查看存储在Google云存储桶中的图像?

来自分类Dev

我如何存储PDO对象

来自分类Dev

在统一3d中单击对象时,如何创建对话框并显示它?

来自分类Dev

如何下载Firebase存储文件

来自分类Dev

如何显示存储在变量中的图像?

来自分类Dev

如何获取存储在AWS Bucket中的对象的存储类

来自分类Dev

如何使用存储在文本文件中的图像链接显示图像

来自分类Dev

React Native,如何显示云存储的图像

来自分类Dev

如何从Firebase存储URL创建Firebase存储对象

来自分类Dev

图像如何存储在EMGU中?

来自分类Dev

如何从存储过程创建表?

来自分类Dev

如何存储来自cam的图像?

来自分类Dev

会话存储:如何存储多个对象

来自分类Dev

创建文件夹并按相机存储图像

来自分类Dev

图像如何存储在PDF中?

来自分类Dev

如何创建存储过程?

来自分类Dev

如何创建条件存储过程

来自分类Dev

如何在本地存储中存储变量?

来自分类Dev

如何显示存储在公共文件夹中的图像?

来自分类Dev

如何为存储对象的数组创建循环?

来自分类Dev

如何在异步存储中存储变量?

来自分类Dev

如何下载 csv 文件并将内容存储在对象中