繁体   English   中英

Python Opencv img.item()性能太慢

[英]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 (因为yrange(0, height) )。 如果height > width ,则x将永远不等于height 如果height == width ,那么xy都不会等于height


条件

    if x == height:
        x=0

没有任何用处,因为即使x == height ,对x的赋值也会在循环的下一次迭代中丢失。

同样的道理

    if y == width:
        y=0     

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM