O que é diferente entre todas essas interfaces OpenCV Python?

88

tem

Quais são as principais diferenças e quais devo usar?

Framester
fonte

Respostas:

139

Oficialmente, o OpenCV lança dois tipos de interfaces Python cve cv2.

cv:

Comecei a trabalhar cv. Neste, todos os tipos de dados OpenCV são preservados como tal. Por exemplo, quando carregadas, as imagens têm o cvMatmesmo formato que em C ++.

Para as operações de matriz, há várias funções como cvSet2D, cvGet2D, etc. E algumas discussões dizem, eles são mais lentos.

Para imageROI, você precisa de funções especiais como cvSetImageROI.

Se você encontrar contornos, cvSeqestruturas são retornadas que não são tão boas para trabalhar em comparação com listas Python ou matrizes NumPy.

(E eu acho que em breve seu desenvolvimento será interrompido. Anteriormente, havia apenas cv. Mais tarde, o OpenCV veio com ambos cve cv2. Agora, nos últimos lançamentos, existe apenas o cv2módulo e cvhá uma subclasse dentro cv2. Você precisa chamar import cv2.cv as cvpara acessá-lo.)

cv2:

E o mais recente é cv2. Neste, tudo é retornado como NumPyobjetos como ndarray e native Pythonobjetos como lists, tuples, dictionary, etc. Então, devido a este apoio NumPy, você pode fazer qualquer operação numpy aqui. NumPyé uma biblioteca de processamento de array altamente estável e rápida.

Por exemplo, se você carregar uma imagem, um ndarrayserá retornado.

array[i,j] fornece o valor do pixel na posição (i, j).

Além disso, para imageROI, o corte de matriz pode ser usado como ROI=array[c1:c2,r1:r2]. Não há necessidade de funções separadas.

Para adicionar duas imagens, não há necessidade de chamar nenhuma função, basta fazer res = img1+img2. (Mas a adição de NumPy é uma operação de módulo para arrays uint8 como imagens. Consulte o artigo Diferença entre aritmética de matrizes em OpenCV e Numpy para saber mais.

Os contornos retornados são listas de matrizes Numpy. Você pode encontrar uma discussão detalhada sobre Contours in Contours - 1: Getting Started .

Resumindo, com o cv2 tudo é simplificado e muito rápido.

Uma discussão simples sobre como o NumPy se acelera cv2está na pergunta Stack Overflow Comparação de desempenho de interfaces OpenCV-Python, cv e cv2 .

pyopencv :

Não sei muito sobre isso, já que não usei. Mas parece ter impedido o desenvolvimento posterior.

Acho que seria melhor ficar com as bibliotecas oficiais.

Resumindo, eu recomendo que você use o cv2!

EDITAR: Você pode ver o procedimento de instalação do cv2módulo em Instalar OpenCV no Windows para Python .

Abid Rahman K
fonte
A interface cv2 Python será compilada e instalada se você estiver construindo OpenCV a partir dos fontes. Se estiver usando pacotes binários para Linux ou outro sistema operacional, consulte a documentação do sistema operacional / distribuição. Consulte goo.gl/MUjXi para obter ajuda.
TH.
1
@Framester: consulte o procedimento de instalação para cv2 neste link: opencvpython.blogspot.in/2012/05/…
Abid Rahman K
A resposta de Abid é ótima. Só para acrescentar mais um ponto: fiz um projeto com Python 3.xe a única maneira de ter acesso ao opencv era por meio do ctypes_opencv e do OpenCV 1.0 original. Ele alega suporte para OpenCV pre1.1, mas nunca o fiz funcionar. Com isso, você estará usando o cvSetROI original, etc. interface tipo C.
KobeJohn
Se você deseja instalá-lo com pip. leia aqui ou faça:pip install opencv-python
Timo