Hace unos días, comencé a usar la nueva interfaz OpenCV-Python, cv2
.Comparación de rendimiento de las interfaces OpenCV-Python, cv y cv2
Mi pregunta es con respecto a la comparación de cv
y cv2
interfaz.
En cuanto a la facilidad de uso, la nueva interfaz cv2
ha mejorado mucho más, y es realmente fácil y divertido trabajar con cv2
.
Pero, ¿y la velocidad?
Hice dos pequeños snipplets de código, uno en cv
y otro en cv2
, para verificar las actuaciones. Tanto hace la misma función, los píxeles de una imagen de acceso, probarlo, hacer algunas modificaciones, etc.
A continuación se muestra el código:
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
== =============================================== =
Y el resultado es:
tiempo tomado= 14,4029130936
======================================= =============== interfaz
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)
================= =====================================
El resultado es:
tiempo tomado = 1,16368889809
======================================== ===============
Ver, aquí antiguo cv
es aproximadamente 12 times faster
que cv2
. Y las imágenes resultantes son iguales. (la imagen de entrada es del tamaño 720x540)
¿Por qué sucede esto?
¿Es cv2 más lento en comparación con el cv?
¿O estoy cometiendo un error aquí? ¿Hay un método más rápido en cv2 para el código anterior?
Gracias por la respuesta. ¿Puedes agregar algunos más detalles? ¿Conoces una mejor manera para el procedimiento anterior, cualquier función numpy más rápida, etc.? –
@arkiaz, modifiqué tu cv2 para la versión de bucle, y ahora es la misma velocidad que la versión cv. Y agregué una versión numpy para acelerar más. – HYRY
Gracias, su primer método proporciona una velocidad comparable con el cv, aunque el código se vuelve un poco grande. Resultado obtenido con mi imagen 't = 1.127'. Pero su segundo método da un muy buen resultado de 't = 0.054', pero da una gran pantalla negra (es decir, salida incorrecta). ¿Por qué es? –