У меня есть два массива numpy с dtype=np.uint8
- вот так:
img1=np.uint8(np.random.randint(0, 255, (480, 640)))
img2=np.uint8(np.random.randint(0, 255, (480, 640)))
И я хочу построить положительную разницу этих массивов.
Вот мои первые два утверждения (и третий для справки):
def differenceImageV1(img1, img2):
diff=np.empty_like(img1)
h, w=img1.shape
for y in range(h):
for x in range(w):
if img1[y, x]<img2[y, x]: diff[y, x]=img2[y, x]-img1[y, x]
else: diff[y, x]=img1[y, x]-img2[y, x]
return(diff)
def differenceImageV2(img1, img2):
return(np.uint8(np.absolute(np.int16(img1)-np.int16(img2))))
def differenceImageV3(img1, img2): # fast - but wrong result
return(img1-img2)
Я получаю эти времена выполнения (и суммы для проверки, если они равны):
10x: 1893.54 ms np.sum=26122208
1000x: 411.71 ms np.sum=26122208
1000x: 26.60 ms np.sum=39123624
Есть ли способ получить правильный результат быстрее, чем с V2?