¿Qué es diferente entre todas estas interfaces OpenCV Python?

88

Existen

¿Cuáles son las principales diferencias y cuál debo usar?

Framester
fuente

Respuestas:

138

Oficialmente, OpenCV lanza dos tipos de interfaces Python cvy cv2.

CV:

Empecé a trabajar cv. En esto, todos los tipos de datos de OpenCV se conservan como tales. Por ejemplo, cuando se cargan, las imágenes tienen el cvMatmismo formato que en C ++.

Para las operaciones de la matriz, hay varias funciones como cvSet2D, cvGet2D, etc, y algunas discusiones dicen, son más lentos.

Para imageROI, necesita funciones especiales como cvSetImageROI.

Si encuentra contornos, cvSeqse devuelven estructuras con las que no es tan bueno trabajar en comparación con las listas de Python o las matrices NumPy.

(Y creo que pronto se detendrá su desarrollo. Anteriormente, solo había cv. Más tarde, OpenCV vino con ambos cvy cv2. Ahora, en las últimas versiones, solo está el cv2módulo, y cvhay una subclase dentro cv2. Necesitas llamar import cv2.cv as cvpara acceder a él.)

cv2:

Y el último es cv2. En esto, todo se devuelve como NumPyobjetos como ndarray y native Pythonobjetos como lists, tuples, dictionary, etc Por lo tanto, debido a este apoyo NumPy, se puede hacer cualquier operación numpy aquí. NumPyes una biblioteca de procesamiento de matrices muy estable y rápida.

Por ejemplo, si carga una imagen, ndarrayse devuelve un.

array[i,j] le da el valor de píxel en la posición (i, j).

Además, para imageROI, el corte de matriz se puede usar como ROI=array[c1:c2,r1:r2]. Sin necesidad de funciones independientes.

Para agregar dos imágenes, no es necesario llamar a ninguna función, simplemente hágalo res = img1+img2. (Pero la adición de NumPy es una operación de módulo para matrices uint8 como imágenes. Consulte el artículo Diferencia entre la aritmética de matrices en OpenCV y Numpy para obtener más información.

Los contornos devueltos son listas de matrices Numpy. Puede encontrar una discusión detallada sobre Contours en Contours - 1: Getting Started .

En resumen, con cv2 todo se simplifica y es bastante rápido.

Una discusión simple sobre cómo se acelera NumPy cv2en la pregunta Stack Overflow Comparación de rendimiento de interfaces OpenCV-Python, cv y cv2 .

pyopencv :

No sé mucho sobre esto ya que no lo he usado. Pero parece haber detenido un mayor desarrollo.

Creo que sería mejor ceñirse a las bibliotecas oficiales.

En resumen, ¡le recomendaría utilizar cv2!

EDITAR: Puede ver el procedimiento de instalación del cv2módulo en Instalar OpenCV en Windows para Python .

Abid Rahman K
fuente
La interfaz cv2 Python se compilará e instalará si está compilando OpenCV a partir de las fuentes. Si está utilizando paquetes binarios para Linux u otro sistema operativo, debe consultar la documentación de su sistema operativo / distribución. Consulte goo.gl/MUjXi para obtener ayuda.
TH.
1
@Framester: consulte el procedimiento de instalación de cv2 en este enlace: opencvpython.blogspot.in/2012/05/…
Abid Rahman K
La respuesta de Abid es genial. Solo para agregar un punto más: hice un proyecto con Python 3.xy la única forma de obtener acceso a opencv era a través de ctypes_opencv y el OpenCV 1.0 original. Afirma ser compatible con OpenCV pre1.1 pero nunca lo hice funcionar. Con eso, estará usando el cvSetROI original, etc. interfaz tipo C.
KobeJohn
Si desea instalarlo con pip. lee aquí o hazlo:pip install opencv-python
Timo hace