好吧,所以我试图采取图像的红色通道,并将其绘制(最好是3d)到图像。图像是480x640(或左右),并从网络摄像头拍摄。我目前使用scipy,numpy和python来获取图像,提取他的红色通道并处理它。这一切都有效。发生绘制图像通过强度的红色通道
然而,当我尝试绘制它,2个不同的问题,这取决于我如何尝试绘图:
1)宽度不匹配,它不喜欢的图像不是正方形。
2)它只绘制图像的一行(x val = 0,所有y vals)。
我附上了相关的代码。评论无处不在,因为当我尝试不同的方式。
fig = plt.figure()
#ax = Axes3D(fig)
#ax = fig.add_subplot(111, projection='3d')
X = [range(480), range(480)]
Y = [range(480), range(480)]
#X = range(len(self.R))
#Y = range(len(self.R))
'''
surf = ax.plot_surface(X, Y, np.resize(self.R, (480, 480)) , rstride=1, cstride=10, cmap=cm.jet, linewidth=0, antialiased=False)
ax.set_zlim3d(0.0, 255.0)
ax.w_zaxis.set_major_locator(LinearLocator(100))
ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))
m = cm.ScalarMappable(cmap=cm.jet)
m.set_array(self.frame_in)
fig.colorbar(m)
np.savetxt("tmp.txt", self.R)
'''
#np.savetxt("tmp.out", self.R[0])
#np.savetxt("tmp.out1", self.R[1])
#np.savetxt("tmp.txt", self.frame_in, "[ %s ]", "\t")
#plt.subplot(212)
#x, y = self.R.shape
#x = range(x)
#y = range(y)
#X, Y = np.meshgrid(x, y)
plt.scatter(X, Y, self.R)
#plt.pcolormesh(self.R)
#plt.colorbar()
#ax.scatter(x, y, self.R, c='r', marker='o')
plt.show()
如果需要,我可以清理代码,但我希望每个人都能看到我尝试过的多种方式。我错过了一些真正愚蠢的简单吗?它没有任何意义,它将与第一行一起工作,而不是全部。
在此先感谢!
你可以发布一个可运行的代码,也许使用生成的图像?请添加最少的额外代码,但可运行的内容会有所帮助。 – tom10 2014-09-26 19:32:15
你有图像的矩阵吗?在任何情况下,具有[nx,ny,4]形状的图像都可以传递给matplotlib.pyplot.imshow。 [nx,ny,0]是R通道,[nx,ny,1]是G通道,[nx,ny,2]是B通道。 [nx,ny,3]是透明度的“alpha”通道。如果您传递的图像为[nx,ny]形状,则会假定其中一些可用的色彩图... – Alejandro 2014-10-01 17:30:56