cv2.imread()返回的图像是NumPy的数组对象。因此,您可以使用NumPy的函数来加快计算速度。
以下程序显示了如何通过使用ndarray对象的item(),itemset()方法加快循环版本的来源。
import timeimport numpy as npimport cv2gray = cv2.imread('lena_full.jpg',0)height, width = gray.shapeh = np.empty((height,width,3), np.uint8)t = time.time()for i in xrange(height): for j in xrange(width): k = gray.item(i, j) if k == 127: h.itemset(i, j, 0, 255) h.itemset(i, j, 1, 255) h.itemset(i, j, 2, 255) elif k > 127: h.itemset(i, j, 0, 0) h.itemset(i, j, 1, 0) h.itemset(i, j, 2, 255-k) else: h.itemset(i, j, 0, k) h.itemset(i, j, 1, 0) h.itemset(i, j, 2, 0)print time.time()-t下面的程序演示了如何首先创建调色板,并使用NumPy的数组索引来获取结果:
t = time.time()palette = []for i in xrange(256): if i == 127: palette.append((255, 255, 255)) elif i > 127: palette.append((0,0,255-i)) else: palette.append((i, 0, 0))palette = np.array(palette, np.uint8)h2 = palette[gray]print time.time() - tprint np.all(h==h2)
输出为:
0.4530000686650.0309998989105True
简历版本输出为:
0.468999862671
注意:轴0的长度是图像的高度,轴1的长度是图像的宽度



