- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用散点图绘制图像数据。这可能听起来很愚蠢,但我希望将其扩展到 3 维,以便尝试查看 3 维。
当我这样做的时候
pylab.imshow(my_img, cmap=pylab.cm.gist_yarg)
我在查看自己的图像时没有任何问题。但是当我尝试时
ax.scatter(np.arange(my_img.shape[0]),
np.arange(my_img.shape[1]),
c=my_img, cmap=plt.cm.gist_yarg)
我得到的大部分是黑色像素。为什么是这样?有办法让它工作吗?
最佳答案
scatter()
函数为您为 x
和 y
参数传递的数组中的每一对值绘制一个点。在您的示例中,这些数组的值将为 [0, 1, 2, ..., my_img.shape[0]-1]
和 [0, 1, 2, 。 ...,my_img.shape[1]-1]
。最好的情况是,这会绘制一条对角线,如果 x
和 y
的大小不同(即,您的图像不是正方形),会散布()
应该抛出一个错误,即 x 和 y 必须具有相同的大小
。
为了绘制图像中的所有像素,您必须传递每个像素的scatter()
坐标。获取数组中每个元素的坐标的一种方法是 indicies()
来自 numpy 的命令。您只需要最外层值的索引,而不是为每个像素存储的 RGB 值,因此只需向其传递形状的前两个值。
y, x = np.indices( my_img.shape[:2] )
现在,x
和 y
是二维数组,表示二维图像中每个点的坐标。
您要做的另一件事是 reshape 图像数组,使其尺寸为 Nx3,其中 N 是图像中像素总数的长度。这是通过 .reshape()
完成的数组的方法。
colors = my_img.reshape((-1,3))
传递给 reshape 的 -1
告诉 reshape()
自动计算该尺寸,因此您不必显式向其传递像素数。
现在scatter()
命令是:
ax.scatter( x, y, c=colors )
ax.invert_yaxis() #make y=0 appear at the top, similar to imshow()
最后,您想要应用颜色贴图。如果您传递颜色的 RGB 值,scatter()
和 imshow()
会忽略 cmap
参数。您必须将 RGB 值转换为单个值,如 matplotlib Image tutorial 中所示。 .
注意:以这种方式绘制绘图速度很慢,并且可能不适合大图像!
关于python - 使用散点图显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44711177/
我是一名优秀的程序员,十分优秀!