RBG изображение как текстура для 3D-куба с использованием matplotlib - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу построить трехмерный куб, используя matplotlib, и отобразить произвольное изображение RGB (jpg или png) в качестве текстуры на каждую сторону куба. Вот хороший пример здесь с использованием matlab .

enter image description here

Мне просто интересно, как это сделать с помощью Python / matplotlib, возможно, начиная из этот пример .

1 Ответ

0 голосов
/ 29 февраля 2020

Я понял это сам, и следующий код:

import numpy as np
import matplotlib.image as image
import matplotlib.pyplot as plt

C = image.imread('d:/timg.png')

xp, yp, __ = C.shape

x = np.arange(0, xp, 1)
y = np.arange(0, yp, 1)
Y, X = np.meshgrid(y, x)

fig = plt.figure(figsize=(12,9))
ax = fig.gca(projection='3d')
ax.dist=6.2
ax.view_init(elev=38, azim=-45)

ax.plot_surface(X, Y, X-X+yp, facecolors=C,
                rstride=2, cstride=2,
                antialiased=True, shade=False)

ax.plot_surface(X, X-X, Y, facecolors=np.fliplr(C.transpose((1,0,2))),
                rstride=2, cstride=2,
                antialiased=True, shade=False)

ax.plot_surface(X-X+xp, X, Y, facecolors=np.fliplr(C.transpose((1,0,2))),
                rstride=2, cstride=2,
                antialiased=True, shade=False)

Полученное изображение:

3D текстура

Изменение шаг к 1 позволит получить больше деталей изображения png, но кажется, что это не очень эффективный способ, особенно когда размер изображения очень большой.

...