加快两个图像的差异
Speed up difference of two images
我有两张图像作为 numpy 数组,每张都是 180x180 并且具有 R、G、B 值,总共有 97200 个单独的值。我正在遍历每个像素和每个 R、G、B;计算对应的两个像素之间的差异并求和为一个整数。大约需要 5 秒。我怎样才能加快这个过程?
直接使用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
将负值转换为正值以创建正确的总和 - 如 mean squared error.
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() )
所有这些计算仍然很快。
我有两张图像作为 numpy 数组,每张都是 180x180 并且具有 R、G、B 值,总共有 97200 个单独的值。我正在遍历每个像素和每个 R、G、B;计算对应的两个像素之间的差异并求和为一个整数。大约需要 5 秒。我怎样才能加快这个过程?
直接使用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
将负值转换为正值以创建正确的总和 - 如 mean squared error.
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() )
所有这些计算仍然很快。