Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:来自ndindex的图像索引_Python_Python 2.7_Numpy - Fatal编程技术网

python:来自ndindex的图像索引

python:来自ndindex的图像索引,python,python-2.7,numpy,Python,Python 2.7,Numpy,我通过以下代码迭代图像(我还是python初学者): 图像的形状是:(900L、1600L、3L) 除了RGB之外,还有什么方法可以在迭代时获得像素的行和列吗?您的方法很好!如果您还想获得该像素位置的RGB值,可以尝试imRGB[pixel]。但是,只使用两个python循环在轴上迭代会更快。我对这两种方法的计时如下: import numpy as np import time random_data = np.random.random_sample((900, 1600, 3)) imR

我通过以下代码迭代图像(我还是python初学者):

图像的形状是:(900L、1600L、3L)


除了RGB之外,还有什么方法可以在迭代时获得像素的行和列吗?

您的方法很好!如果您还想获得该像素位置的RGB值,可以尝试
imRGB[pixel]
。但是,只使用两个python循环在轴上迭代会更快。我对这两种方法的计时如下:

import numpy as np
import time

random_data = np.random.random_sample((900, 1600, 3))
imRGB = np.round(256 * random_data)

start = time.time()
for pixel in np.ndindex(imRGB.shape[:2]):
    x, y = pixel
    rgb = imRGB[pixel]
end = time.time()
print(end - start)

start = time.time()
for x in xrange(imRGB.shape[0]):
    for y in xrange(imRGB.shape[1]):
        x, y, imRGB[x, y]
end = time.time()
print(end - start)

第一种方法在我的笔记本电脑上花费了1.29秒,而第二种方法花费了0.53秒。根据您希望在循环中执行的操作,可能还有其他特定于numpy的操作,这些操作可能比写出循环更快。希望这有帮助

这里的
pixel
是当前两个索引的元组,
(0,0)、(0,1)…
。这些可以被描述为像素的(X,Y)。这就是你想要的吗?在问题中,数组是3D的,像素只是给你第三维度,我对第一和第二(行,列)感兴趣你的问题不清楚。
import numpy as np
import time

random_data = np.random.random_sample((900, 1600, 3))
imRGB = np.round(256 * random_data)

start = time.time()
for pixel in np.ndindex(imRGB.shape[:2]):
    x, y = pixel
    rgb = imRGB[pixel]
end = time.time()
print(end - start)

start = time.time()
for x in xrange(imRGB.shape[0]):
    for y in xrange(imRGB.shape[1]):
        x, y, imRGB[x, y]
end = time.time()
print(end - start)