我有两个图像作为numpy数组,每个图像是180x180,并且有R、G、B值,总共有97200个值。我遍历每个像素和每个R,G,B;计算对应的两个像素之间的差值,并将其加到一个整数。大约需要5秒。我怎样才能加快手术速度?
发布于 2020-05-17 20:38:40
使用numpy
,您可以直接完成它
result = (array1 - array2).sum()
你也只能在一个方向上计算。
result = (array1 - array2).sum(axis=0)
result = (array1 - array2).sum(axis=1)
result = (array1 - array2).sum(axis=2)
在我的旧计算机上的图像800x600
,它需要大约0.003
秒。
cv2
示例,它将图像作为numpy数组提供。
import cv2
import time
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
print('shape:', img1.shape)
start = time.time()
result = (img1 - img2).sum()
end = time.time()
print('result:', result)
print(' time:', end-start)
编辑:带有图像的 numpy数组可以使用数据类型uint8
,它只能使用值0..255
,因此1-2
可以给出254
而不是-1
。您可以将数据转换为int
,以获得负值和-1
,而不是254
。然后,您可以使用abs()
或**2
将负值转换为正值,以在均方误差中创建正确的和样。
print(img1.dtype, img1.dtype)
img1 = img1.astype(int)
img2 = img2.astype(int)
diff = img1 - img2
print( diff.sum() )
print( (diff**2).sum() )
print( np.abs(diff).sum() )
所有这些计算仍然是快速的。
https://stackoverflow.com/questions/61857699
复制相似问题