我为此构建了很多函数,最快的是:
meanRGB[:] = sum([img[i,j,:] for i,j in args])/len(args)
但对于大型图像来说,这仍然很慢。 4700x3100映像大约需要40秒。(它在旧cpu(第四代)上运行,但这并不重要)
args包含特定x,y的二维坐标
[[0 0] [1 0] [2 1] ...]
更新
感谢你们所有的好心人,他们送来了这些很棒的方法。我认为乔斯布莱克的路是最快的。 您可以在此处模拟情况(简称):
clusterMap = [[1,4,2],[1,2,3],[3,1,4]]
np.random.seed(2)
img = np.random.randint(low = 0, high = 255, size = (4700, 3100, 3))
segments = np.unique(clusterMap)
meanRGB = np.zeros((len(segments),3))
for k, segment in enumerate(segments.ravel()):
args = np.argwhere(clusterMap==segment)
meanRGB[k,:] = sum([img[i,j,:] for i,j in args])/len(args)
print(f"\n{meanRGB}")
使用
numba
的一种方法:验证:
基准测试(大约快几百倍):
按通道拆分,然后使用内置平均值
如果列表不是要使用的完整图像,请使用
我试了一下。我认为这更快,但我没有你的图像或
args
数组,所以我不确定(示例)输出:
相关问题 更多 >
编程相关推荐