Несколько дней назад я начал использовать новый интерфейс OpenCV-Python, cv2
.
Мой вопрос касается сравнения интерфейсов cv
и cv2
.
Что касаетсяпростота использования, новый интерфейс cv2
значительно улучшился, а работать с cv2
.
действительно просто и весело. А как же скорость?
Я сделал два небольшихфрагменты кода, один в cv
и другой в cv2
, чтобы проверить производительность.Оба выполняют одну и ту же функцию, получают доступ к пикселям изображения, проверяют его, вносят некоторые изменения и т. Д.
Ниже приведен код:
cv2 interface
:
import time
import numpy as np
import cv2
gray = cv2.imread('sir.jpg',0)
width = gray.shape[0]
height = gray.shape[1]
h = np.empty([width,height,3])
t = time.time()
for i in xrange(width):
for j in xrange(height):
if gray[i,j]==127:
h[i,j]=[255,255,255]
elif gray[i,j]>127:
h[i,j]=[0,0,255-gray[i,j]]
else:
h[i,j]=[gray[i,j],0,0]
t2 = time.time()-t
print "time taken = ",t2
====================================================
И результат:
затраченное время = 14.4029130936
============================================================
cv интерфейс:
import cv,time
gray = cv.LoadImage('sir.jpg',0)
h = cv.CreateImage(cv.GetSize(gray),8,3)
t=time.time()
for i in xrange(gray.width):
for j in xrange(gray.height):
k = cv.Get2D(gray,j,i)[0]
if k==127:
cv.Set2D(h,j,i,(255,255,255))
elif k>127:
cv.Set2D(h,j,i,(0,0,255-k))
else:
cv.Set2D(h,j,i,(k,0,0))
t2 = time.time()-t
print "time taken = ",t2
cv.ShowImage('img',h)
cv.WaitKey(0)
=====================================================
Результат:
потраченное время = 1.16368889809
=======================================================
Видите, здесь старое cv
примерно 12 times faster
, чем cv2
.И полученные изображения одинаковы.(входное изображение имеет размер 720x540)
Почему это происходит?
Медленнее ли cv2 по сравнению с cv?
Или я здесь ошибаюсь?Есть ли более быстрый метод в cv2 для вышеуказанного кода?