gpt4 book ai didi

python - 优雅地迭代图像的平面 - 如果不止一个

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:53 24 4
gpt4 key购买 nike

我来自 Matlab 世界,我对 Python 比较陌生,所以我认为我可能从一个完全错误的角度来处理这个问题。

无论如何,我经常发现自己编写的代码需要在图像的 R、G、B 平面上单独操作,但需要足够通用,如果图像是灰度的,它仍然可以工作。现在我开始的不那么聪明的方法是:

if im_in.ndim == 2:
im_out = signal.convolve2d(im_in, filt, 'same')
else:
im_out = np.empty_like(im_in)
for kk in range(im_in.shape[2]):
im_out[:,:,kk] = signal.convolve2d(im_in, filt, 'same')

别管实际操作 - 我在这里使用 signal.convolve2d 作为示例。为简单起见,我们假设 ndim 在这里只能是 2 或 3。

现在 Matlab 非常聪明的地方在于,我可以在表示图像的 3D 数组的第三维上循环,而不管平面的数量。

上面的明显替代是这样的:

if im_in.ndim == 2:
im_in.shape = (im_in.shape[0], im_in.shape[1], 1)

然后我就可以在三维中循环(就像上面的 else 案例一样),但在我看来这仍然有点 hack,我必须 reshape im_out 结束前。是否有适当、优雅的方式来处理这种情况?

最佳答案

您可以使用 numpy.atleast_3d()无条件地获取具有正确维数的输入数组的 View ,然后遍历平面。这具有保存 if 语句而不修改输入图像的优点。

关于python - 优雅地迭代图像的平面 - 如果不止一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29939888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com