到目前为止,我做我想做的事情如下
ar2 = [[0 for t in range(maxy-miny)] for t in range(maxx-minx)]
for first,x in enumerate(range(minx, maxx)):
for second,y in enumerate(range(miny, maxy)):
ar2[first][second] = a[x][y]
io.imshow(ar2)
问题在于它真的很慢。所以我正在考虑numpy。
ar = np.zeros((maxx-minx, maxy-miny), dtype=np.ndarray)
for first,x in enumerate(range(minx, maxx)):
for second,y in enumerate(range(miny, maxy)):
ar[first][second] = a[x][y]
io.imshow(ar)
虽然在第二种情况下,图像不会显示
TypeError: Image data can not convert to float
我试图检查可能发生的事情,所以我测试了ar [0]& AR2 [0]
二维数组的输出:
[array([230,197,204],dtype = uint8) 数组([241,209,214], D型= UINT8)
数组([233,201,206],dtype = uint8)数组([214,183, 188],dtype = uint8)...
Numpy数组的输出:
[array([230,197,204] , dtype = uint8), 数组([241,209,214] , dtype = uint8),
数组([233,201,206],dtype = uint8),...
显然,numpy正在使用逗号,但我无法理解它是如何以及为什么会发生。
答案 0 :(得分:1)
您使用的dtype不是类似数字的有效类型,您使用np.ndarray
作为数组中各个值的类型。
import matplotlib.pyplot as plt
import numpy as np
ar = np.zeros((maxx-minx, maxy-miny))
a = plt.imread('something.jpg')
for first,x in enumerate(range(minx, maxx)):
for second,y in enumerate(range(miny, maxy)):
ar[first][second] = a[x][y]
plt.imshow(ar)
这应该有效 - 但是你还没有提供足够的信息来可靠地测试它。
我还建议使用plt
作为matplotlib.pyplot
的缩写,而不是io
,这很容易与实际的io模块混在一起。
但是,您可以实现相同的目标,但根本不能循环:
ar3[0:maxx-minx, 0:maxy-miny] = a[minx:maxx,miny:maxy]
np.allclose(ar2, ar3) # True