error: want to render pokemon to frame, but error
This commit is contained in:
parent
048f15cb08
commit
b31eae9933
40
main.py
40
main.py
@ -188,6 +188,35 @@ def visualization(inverse_matrix_M, pokemon):
|
|||||||
|
|
||||||
vis.run()
|
vis.run()
|
||||||
|
|
||||||
|
def render_pokemon(frame, M, camera_position, pokemon):
|
||||||
|
pokemon_points = pokemon.get_position()
|
||||||
|
pokemon_colors = pokemon.get_colors()
|
||||||
|
distance = np.linalg.norm(pokemon_points - camera_position, axis=1)
|
||||||
|
|
||||||
|
sorted_indices = np.argsort(-distance)
|
||||||
|
pokemon_points = pokemon_points[sorted_indices]
|
||||||
|
pokemon_colors = pokemon_colors[sorted_indices]
|
||||||
|
|
||||||
|
|
||||||
|
for index in range(pokemon_points.shape[0]):
|
||||||
|
pokemon_color = [int(i*255) for i in pokemon_colors[index]]
|
||||||
|
# print(pokemon_color)
|
||||||
|
# print(pokemon_points[index])
|
||||||
|
pokemon_point = CAMERA_MATRIX @ M
|
||||||
|
# print(pokemon_point.shape)
|
||||||
|
# print(pokemon_points.shape)
|
||||||
|
pokemon_point = pokemon_point @ (pokemon_points[index].reshape((4, 1)))
|
||||||
|
pokemon_point = pokemon_point[:2] / pokemon_point[2]
|
||||||
|
pokemon_point = [int(i) for i in pokemon_point]
|
||||||
|
# print(pokemon_point)
|
||||||
|
|
||||||
|
# print(frame.shape)
|
||||||
|
|
||||||
|
if pokemon_point[0] >= 0 and pokemon_point[0] <= frame.shape[0] and pokemon_point[1] >= 0 and pokemon_point[1] <= frame.shape[1]:
|
||||||
|
frame = cv2.circle(frame, pokemon_point, 5, pokemon_color, thickness=-1)
|
||||||
|
|
||||||
|
return frame
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
# 設定連接到 Android 手機的相機
|
# 設定連接到 Android 手機的相機
|
||||||
@ -255,6 +284,17 @@ if __name__ == '__main__':
|
|||||||
print("t:", translation_vector)
|
print("t:", translation_vector)
|
||||||
print()
|
print()
|
||||||
|
|
||||||
|
R = rotation_matrix
|
||||||
|
t = translation_vector
|
||||||
|
rt = np.concatenate((R, t), axis=1)
|
||||||
|
M = np.concatenate((rt, [[0, 0, 0, 1]]), axis=0)
|
||||||
|
M_inv = np.linalg.inv(M)
|
||||||
|
camera_position = M_inv @ np.array([0, 0, 0, 1])
|
||||||
|
camera_position[2] = -camera_position[2]
|
||||||
|
|
||||||
|
frame = render_pokemon(frame, rt, camera_position, pokemon)
|
||||||
|
cv2.imwrite('test.jpg', frame)
|
||||||
|
|
||||||
|
|
||||||
# 顯示結果
|
# 顯示結果
|
||||||
cv2.namedWindow('Paper Detection(edge)', 0)
|
cv2.namedWindow('Paper Detection(edge)', 0)
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
|
import os
|
||||||
import open3d as o3d
|
import open3d as o3d
|
||||||
import trimesh
|
import trimesh
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
@ -6,7 +6,9 @@ from PIL import Image
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
# 读取 OBJ 模型文件
|
# 读取 OBJ 模型文件
|
||||||
mesh = trimesh.load('output.obj')
|
for d in os.listdir('models'):
|
||||||
|
print(d)
|
||||||
|
mesh = trimesh.load('models/{}/0/output.obj'.format(d))
|
||||||
|
|
||||||
colors = mesh.visual.to_color().vertex_colors
|
colors = mesh.visual.to_color().vertex_colors
|
||||||
points = mesh.vertices
|
points = mesh.vertices
|
||||||
@ -14,7 +16,7 @@ print(colors.shape)
|
|||||||
print(colors)
|
print(colors)
|
||||||
print(points.shape)
|
print(points.shape)
|
||||||
|
|
||||||
np.save('colors.npy', colors)
|
np.save('models/{}/0/colors.npy'.format(d), colors)
|
||||||
np.save('points.npy', points)
|
np.save('models/{}/0/points.npy'.format(d), points)
|
||||||
|
|
||||||
mesh.show()
|
# mesh.show()
|
||||||
|
|||||||
@ -26,6 +26,8 @@ class Pokemon():
|
|||||||
self.cloudpoints['colors'] = self.cloudpoints['colors'] / 255
|
self.cloudpoints['colors'] = self.cloudpoints['colors'] / 255
|
||||||
self.cloudpoints['colors'] = self.cloudpoints['colors'][:, :3]
|
self.cloudpoints['colors'] = self.cloudpoints['colors'][:, :3]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_position(self):
|
def get_position(self):
|
||||||
transform_matrix = np.array([
|
transform_matrix = np.array([
|
||||||
[self.scalar, 0, 0, 0],
|
[self.scalar, 0, 0, 0],
|
||||||
@ -38,7 +40,7 @@ class Pokemon():
|
|||||||
ones = np.ones((pokemon_points.shape[0], 1))
|
ones = np.ones((pokemon_points.shape[0], 1))
|
||||||
pokemon_points = np.concatenate([pokemon_points, ones], axis=1)
|
pokemon_points = np.concatenate([pokemon_points, ones], axis=1)
|
||||||
pokemon_points = pokemon_points @ transform_matrix
|
pokemon_points = pokemon_points @ transform_matrix
|
||||||
pokemon_points = pokemon_points[:, :3]
|
# pokemon_points = pokemon_points[:, :3]
|
||||||
|
|
||||||
return pokemon_points
|
return pokemon_points
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user