【发布时间】:2020-01-29 20:40:11
【问题描述】:
我想构建一个 CNN,并且我使用 matplotlib 来读取图像(尝试使用 cv2,但在正确显示图像方面效果不佳,并且 PIL 由于某种原因对我不起作用)无论如何,我可以读取图像,但将其读取为 Image[height][width][channel]。我怎样才能把它改成这样读: Image[channel][height][width] 所以以后对它进行卷积会更容易吗? 当然,我的意思是不运行嵌套 for 循环来从每个通道获取每个值并将它们放入矩阵中,我是在问是否有更好的方法。
感谢所有帮助:)
【问题讨论】:
-
几乎没有理由为您的目的切换轴的顺序。您绝对可以在不使用循环的情况下使卷积工作——您只需要学习如何处理 numpy 中的广播:)。此外,OpenCV 和 PIL 以及您将使用的几乎任何库都将期望 (h, w, channels) 而不是 (channels, h, w)。我建议坚持使用 OpenCV 进行图像读取,而是更改显示图像的方式以适合您。
-
我的意思是,我可以,但是将第一个更改为频道更容易,因为它可以让我很容易地通过它来刺激它,而且它不会接受它,这就是我制作它的原因它具有不同形状的克隆,以便我可以更轻松地更改它,我尝试使用 cv2.imshow(image) 在 CV2 中显示图像,但它什么也没做。请问:numpy中的“广播”到底是什么意思?
-
imshow()烦人地不绘制窗口,你必须使用waitKey()---见here。无论如何,您都不应该遍历一个 numpy 数组,因为它很慢;通常在 numpy 中,您使用 numpy 中的函数在 C 中进行幕后的迭代和计算。 numpy 中的Broadcasting 是您可以一次在多个轴上操作的方式,例如卷积每个通道。
标签: python matplotlib image-processing