Несколько дней назад я начал использовать новый интерфейс OpenCV-Python, cv2
.
Мой вопрос касается сравнения интерфейса cv
и cv2
.
Что касается простоты использования, новый интерфейс cv2
значительно улучшился, и с cv2
действительно легко и весело работать.
А как насчет скорости?
Я сделал два небольших фрагмента кода, один в cv
, а другой в cv2
, чтобы проверить производительность. Оба выполняют одну и ту же функцию: обращаются к пикселям изображения, тестируют его, вносят некоторые изменения и т. Д.
Ниже приведен код:
интерфейс cv2
:
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 раз быстрее
, чем cv2
. И полученные изображения такие же. (входное изображение имеет размер 720x540)
Почему это происходит?
Является ли cv2 медленнее по сравнению с cv?
Или я здесь ошибаюсь? Есть ли в cv2 более быстрый метод для приведенного выше кода?