【问题标题】:numpy concatenate with axis -1 visualize with matplotlibnumpy 与轴 -1 连接使用 matplotlib 可视化
【发布时间】:2019-10-17 05:29:51
【问题描述】:

给定 2 张图像,np.concatenate 中的 axis = 0axis = 1 分别连接行和列中的图像。

axis = -1 将拼接图像的通道更改为6,这导致使用matplotlib 进行可视化时出现以下错误:

raise TypeError("Invalid dimensions for image data")
TypeError: Invalid dimensions for image data

我使用的代码:

import matplotlib.pyplot as plt
import numpy as np
img_A = cv2.imread('1.jpg')
img_B = cv2.imread('2.jpg')

conc_img = np.concatenate((img_A, img_B), axis=-1)

print "shape:\t imgA={},imgB={},conc_img={}".format(img_A.shape, img_B.shape, conc_img.shape)
plt.imshow(conc_img)
plt.show()

打印函数返回:

shape: imgA=(375, 500, 3),imgB=(375, 500, 3),conc_img=(375, 500, 6) # <<-- channel is changed to 6  

如何可视化这个拼接的图像?

【问题讨论】:

  • 能否分享这两张图片(1.jpg 和 2.jpg),如果可以的话?
  • 根据 matplotlib imshow docs (matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.imshow.html) .. 您只能可视化 3 个通道或 4 个通道(第 4 个通道为 alpha/透明度)。 “支持的数组形状是:(M,N):带有标量数据的图像。数据使用颜色图进行可视化。(M,N,3):带有 RGB 值(0-1 浮点数或 0-255 整数)的图像. (M, N, 4):具有 RGBA 值(0-1 float 或 0-255 int)的图像,即包括透明度。” ... 拥有 6 个频道的最终目的是什么?
  • 你明白为什么你会得到尺寸 6 的尺寸吗?如果 3 个值代表颜色,那么 6 应该做什么?你期待什么样的可视化?
  • 重读您的问题,我不确定我是否理解...您希望生成的图像是什么样的?

标签: python numpy matplotlib


【解决方案1】:

您或多或少地回答了您自己的问题。如果您在axis=-1(最后一个轴)上进行连接,那么您将在 RGB 通道上进行连接。正如你所说,这会导致 6 个通道,而图像只能有 1、3 或 4 个通道。

试试:

conc_img = np.concatenate((img_A, img_B), axis=1)

你会得到一个形状数组(375, 1000, 3)。或者将axis改为0,在第一个轴上拼接得到(750, 500, 3)

或者您的意思不是“连接”?如果您希望结果具有(375, 500, 3) 的形状,那么您正在寻找不同的功能。

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    相关资源
    最近更新 更多