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的长度是图像的宽度
0
几天前,我开始使用新的OpenCV-Python接口
cv2
。我的问题是关于
cv
和cv2
接口的比较。关于易用性,新
cv2
界面改进大得多,这是很容易和乐趣与工作cv2
。但是速度呢?
我制作了两个小代码段,一个在
cv
,另一个在cv2
,以检查性能。两者具有相同的功能,访问图像的像素,对其进行测试,进行一些修改等。下面是代码:
cv2 interface
:================================================== ===
结果是:
花费时间= 14.4029130936
================================================== ====
简历界面:
================================================== ====
结果是:
花费时间= 1.16368889809
================================================== =====
看,这里旧的
cv
大约比cv2
12 times faster
。结果图像是相同的。 (输入图像的尺寸为720x540)为什么会这样?
与cv2相比,cv2慢吗?
还是我在这里犯任何错误?以上代码在cv2中是否有更快的方法?