我正在尝试使用numpy制作一个rgb彩色图片编辑器。我已经尝试过使用嵌套的for循环,但是它确实很慢(超过一分钟)。我想控制嵌套数组第三维的第一个,第二个和第三个元素(r,g,b)。谢谢
这只是看数字:
%matplotlib inline
import numpy as np
img = plt.imread('galaxy.jpg')
img = np.array(img)
for i in range(len(img)):
for j in range(len(img[i])):
for k in (img[i][j]):
print(k)
也许这可能对您有帮助。 np.ndenumerate()
使您可以循环访问矩阵而无需嵌套for循环。我做了一个快速测试,就打印而言,我的第二个for循环(在下面的示例中)比三重嵌套的for循环要快一些。打印非常慢,因此取出打印语句可能有助于提高速度。至于修改这些值,我添加了r g b a
变量,可以修改这些变量以缩放各种像素值。只是一个想法,但也许它可以给您更多的想法以进行扩展。另外,我也没有检查哪个索引值对应于r,g,b或a。
r = 1.0
g = 1.0
b = 1.0
a = 1.0
for index, pixel in np.ndenumerate(img): # <--- Acheives the same as your original code
print(pixel)
for index, pixel in np.ndenumerate(img):
i = index[0]
j = index[1]
print("{} {} {} {}".format(img[i][j][0], img[i][j][1], img[i][j][2], img[i][j][3]))
for index, pixel in np.ndenumerate(img):
i = index[0]
j = index[1]
imgp[i][j][0] *= r;
imgp[i][j][1] *= g;
imgp[i][j][2] *= b;
imgp[i][j][3] *= a;
希望这会有所帮助