Сравнение производительности интерфейсов OpenCV-Python, cv и cv2

Несколько дней назад я начал использовать новый интерфейс 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 более быстрый метод для приведенного выше кода?

25
задан Peter Mortensen 19 August 2013 в 21:14
поделиться