2017-01-19 100 views
0

我想在python中創建HSV cone使用Python和Matplotlib建模HSV色彩空間錐3D

努力去適應在another question給出了MATLAB的解決方案:

import numpy as np 
import cv2 

H = np.repeat([np.linspace(0, 179, 100)], 100, axis=0) 
S = np.repeat([np.concatenate((np.linspace(0, 255, 50), np.linspace(255, 0, 50)))], 100, axis=0).transpose() 
V = np.repeat([np.concatenate((np.ones(50)*255, np.linspace(255, 0, 50)))], 100, axis=0).transpose() 

hsv = np.asarray(cv2.merge((H, S, V)), dtype=np.uint8) 
C = cv2.cvtColor(hsv, cv2.COLOR_HSV2RGB) 

theta = np.linspace(0, 2*np.pi, 100) 
X = np.asarray([np.zeros(100), np.cos(theta), np.zeros(100)]) 
Y = np.asarray([np.zeros(100), np.sin(theta), np.zeros(100)]) 
Z = np.asarray([2*np.ones(100), 2*np.ones(100), np.zeros(100)]) 

import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 

ax.plot_surface(X, Y, Z, color=C) 

,但得到的錯誤:「無效的RGBA參數... RGBA序列的長度應該是3或4」。

試圖重塑下與C.reshape(3, 100, 100)但得到的錯誤:「無效的RGBA參數...只有長度爲1的陣列可以轉換到Python標量」

沒有ARG color=C我有這樣的:

HSV cone with ax.plot_surface(X, Y, Z)

謝謝!

回答

1

該錯誤已經告訴您,您只能擁有長度爲3或4的序列作爲參數color。顏色參數基本上預計,單一顏色(可以作爲值(R,G,B)的列表。

幸運的是,在plot_surface()另一種說法,它允許您設置的情節個人的面孔,即facecolors的顏色。

ax.plot_surface(X, Y, Z, facecolors=C/255.) 

雖然這會工作,而不是拋出一個錯誤,在劇情所有顏色都接近灰色,這是在與列C協議,但我不知道這是可以預期的。