cv2.imread()返回的图像是NumPy的数组对象。因此,您可以使用NumPy的函数来加快计算速度。
以下程序显示了如何通过使用ndarray对象的item(),itemset()方法加快循环版本的来源。
import time
import numpy as np
import cv2
gray = cv2.imread('lena_full.jpg',0)
height, width = gray.shape
h = 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() - t
print np.all(h==h2)
输出为:
0.453000068665
0.0309998989105
True
简历版本输出为:
0.468999862671
注意:轴0的长度是图像的高度,轴1的长度是图像的宽度