[英]Python Opencv img.item() performance too slow
我写了这个小代码来比较两个100x100 jpeg图像的像素灰度值。 但是,性能令人失望(10,000次比较为1.5秒)。 有没有办法获得更好的性能?
这是代码:
import cv2
import numpy as np
import math
import datetime
img1 = cv2.imread('Testbild 2014-08-23 17:27:25.141362.jpeg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('Testbild 2014-08-23 17:27:25.061802.jpeg', cv2.IMREAD_GRAYSCALE)
height, width =img1.shape
cnt = 0
threshold = 10
print("start:" + str(datetime.datetime.now()))
for y in range(0 , height):
for x in range(0 , width):
val1 = img1.item(y,x)
val2 = img2.item(y,x)
diff_abs = math.fabs(int(val1)-int(val2))
if diff_abs > threshold:
cnt += 1
if x == height and y == width:
break
if x == height:
x=0
if y == width:
y=0
print("end:" + str(datetime.datetime.now()))
print("Result: " + str(cnt))
非常感谢您的回答!
双循环:
for y in range(0 , height):
for x in range(0 , width):
val1 = img1.item(y,x)
val2 = img2.item(y,x)
diff_abs = math.fabs(int(val1)-int(val2))
if diff_abs > threshold:
cnt += 1
if x == height and y == width:
break
if x == height:
x=0
if y == width:
y=0
可以替换为:
diff_abs = np.abs(img1-img2)
cnt = (diff_abs > threshold).sum()
这利用了NumPy数组执行快速逐元素运算的能力。
条件
x == height and y == width
永远都不是真的。 如果height < width
,则y
永远不会等于width
(因为y
在range(0, height)
)。 如果height > width
,则x
将永远不等于height
。 如果height == width
,那么x
和y
都不会等于height
。
条件
if x == height:
x=0
没有任何用处,因为即使x == height
,对x
的赋值也会在循环的下一次迭代中丢失。
同样的道理
if y == width:
y=0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.