gpt4 book ai didi

python - 比较数组时,为什么 "in1d"比 "a==b"慢得多

转载 作者:太空宇宙 更新时间:2023-11-03 14:17:44 24 4
gpt4 key购买 nike

我需要能够比较两张图片并提取任何独特的像素来创建第三张图片。为此,我做了以下工作:

import cv2
import numpy as np

img = cv2.imread("old.jpg")
img2 = cv2.imread("new.jpg")

image2 = cv2.cvtColor(img2, cv2.COLOR_RGB2RGBA)

for (x,y,z), value in np.ndenumerate(img):
dif = img[x,y,0] == img2[x,y,0] #only checking one color for speed
diff = str(dif)
if "True" in diff:
image2[x,y,3] = 0
cv2.imwrite("result.png", image2)

效果相当好,但一张 640 x 480 的图片大约需要 10 秒,我希望能缩短一半左右的时间。所以我改变了这一行:

dif = img[x,y,0] == img2[x,y,0]

dif = np.in1d(img[x,y,0], img2[x,y,0])

结果是相同的,但现在需要大约 3 分钟,而不是加快速度。我完全不知道为什么。

我意识到在 python 中遍历大型数组中的元素会很耗时,但为什么 in1d 这么慢?

(作为旁注,我只会使用“palette method”,但由于我对 numpy 数组的了解有限,我看不到为此目的实现它的方法。)

最佳答案

np.in1d在最坏的情况下检查其第一个参数的每个元素与其第二个元素的每个元素。对于每个元素 i,jimg它检查是否有元素 k,limg2具有相同的值。这意味着您的 640x480你最终可以做的图像(640x480)^2比较。

另一方面,==仅按元素检查,它检查元素是否为 i,jimg等于元素 i,jimg2 .它总是有 640x480比较。

np.in1d如果您有不同尺寸的图像,将会起作用,==仅适用于相同尺寸的图像。

关于python - 比较数组时,为什么 "in1d"比 "a==b"慢得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31864160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com