【问题标题】:Plotting image Red channel by intensity按强度绘制图像红色通道
【发布时间】:2014-09-26 02:20:37
【问题描述】:

好的,所以我正在尝试获取图像的红色通道,并将其(最好是 3d)绘制到图像上。图像为 480x640(或大约),取自网络摄像头。我目前正在使用 scipy、numpy 和 python 来获取图像,提取红色通道并进行处理。一切正常。

但是,当我尝试绘制它时,会出现 2 个不同的问题,具体取决于我尝试绘制的方式:

1) 宽度不匹配,不喜欢图片不是方形的。

2) 它只绘制图像的一行(x val = 0,所有 y val)。

我已附上相关代码。评论无处不在,因为当我尝试不同的方式时。

    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()

如果需要,我可以清理代码,但我希望每个人都能看到我尝试过的多种方式。我错过了一些非常愚蠢的简单东西吗?它将与第一行而不是所有行一起使用是没有意义的。

提前致谢!

【问题讨论】:

  • 您能否发布一段可运行的代码,也许使用生成的图像?请添加最少的额外代码,但一些可运行的代码会有所帮助。
  • 你有图片的矩阵吗?在任何情况下,具有 [nx,ny,4] 形状的图像都可以传递给 matplotlib.pyplot.imshow。 [nx,ny,0] 是 R 通道,[nx,ny,1] 是 G 通道,[nx,ny,2] 是 B 通道。 [nx,ny,3] 是透明度的“alpha”通道。如果您传递具有 [nx,ny] 形状的图像,则会在假设某些可用颜色图的情况下对其进行绘制...

标签: python numpy matplotlib scipy


【解决方案1】:

尝试使用pyplot.imshow

plt.cmap('Reds')
plt.imshow(self.R)
plt.show()

【讨论】:

  • 由于某种原因这对我不起作用。您是否知道为什么 hxw 不匹配如此混乱?或者为什么它只会绘制一行?
猜你喜欢
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-27
  • 2014-05-27
  • 1970-01-01
  • 2020-04-23
  • 2019-05-16
相关资源
最近更新 更多