我想在python中创建HSV cone。
尝试调整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 arg ... rgba序列的长度应为3或4"。
试图用C.reshape(3, 100, 100)
重塑C,但得到错误:"无效的rgba arg ...只有length-1数组可以转换为Python标量"
没有arg color=C
我得到了这个:
HSV cone with ax.plot_surface(X, Y, Z)
谢谢!
答案 0 :(得分:1)
错误已经告诉您,您只能将长度为3或4的序列作为color
的参数。 color参数基本上需要一种颜色(可以作为值列表(R,G,B)
给出。
幸运的是,plot_surface()
中还有另一个参数允许您设置绘图中各个面的颜色,即facecolors
。
ax.plot_surface(X, Y, Z, facecolors=C/255.)
虽然这会起作用而不会抛出错误,但在绘图中所有颜色都接近灰色。这与数组C一致,但我不确定这是否是预期的。