为什么在使用 imshow 显示时使用 np.hstack 零填充图像会使其变白?

Moh*_*ani 1 python opencv numpy image-processing matplotlib

我有一个patch大小的图像:(200, 350 , 3)

补丁

在此处输入图片说明

我正在尝试使用以下方法将黑色图像水平堆叠到此:

stacked_image = np.hstack((patch, np.zeros((200, 2450, 3))))
Run Code Online (Sandbox Code Playgroud)

所以stacked_image的形状是: (200, 2800, 3)

但是当我用plt.imshow()或显示它时,图像补丁会变白cv2.imshow() 在此处输入图片说明

我不明白为什么贴片变白了。我期待补丁图像和剩余的列像素是黑色的。我怎样才能做到这一点?

此外,当我使用 保存图像时cv2.imwrite,我得到了预期的输出:

cv2.imwrite(r'hstack.png', np.hstack((patch, np.zeros((200, 2450, 3)))))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

有人可以解释为什么会这样吗?

Nul*_*man 5

我相信你的问题是dtype 变化

np.zeros((200, 2450, 3))
Run Code Online (Sandbox Code Playgroud)

np.zeros((200, 2450, 3), dtype=np.uint8)
Run Code Online (Sandbox Code Playgroud)

你也可以试试看pyplot.imshow的cmap参数

  • `np.zeros` 的默认 dtype 是 float(64-bit),每个通道的颜色范围是 8-bit(256),这就是不匹配的原因。这是处理图像时的常见问题 (2认同)