Tüm bu OpenCV Python arayüzleri arasındaki fark nedir?


Yanıtlar:


139

Resmi olarak, OpenCV iki tür Python arabirimi yayınlar cvve cv2.

Özgeçmiş:

Üzerinde çalışmaya başladım cv. Bunda, tüm OpenCV veri türleri bu şekilde korunur. Örneğin, yüklendiğinde, görüntüler cvMatC ++ ile aynı formattadır .

Dizi işlemleri için, orada gibi çeşitli fonksiyonları cvSet2D, cvGet2Dvb Ve bazı tartışmalar dedim, onlar daha yavaştır.

İmageROI için, gibi özel işlevlere ihtiyacınız var cvSetImageROI.

Eğer hatlarını bulursanız, cvSeqyapılar Python listeleri veya NumPy diziler ile karşılaştırıldığında ile çalışmak için çok iyi değil döndürülür.

(Ve sanırım, yakında gelişimi durdurulacak. Daha önce, sadece vardı cv. Daha sonra, OpenCV hem cvve hem de geldi cv2. Şimdi, en son sürümlerde sadece cv2modül var ve cviçinde bir alt sınıf var cv2. Aramalısın import cv2.cv as cverişmek için.)

cv2:

Ve sonuncusu cv2. Bu, her şey olarak döndürülür NumPygibi nesneler ndarray ve native Pythonbenzeri nesneleri lists, tuples, dictionaryvb Yani nedeniyle bu NumPy desteği, buradan herhangi numpy işlemi yapabilirsiniz. NumPyoldukça kararlı ve hızlı bir dizi işleme kitaplığıdır.

Örneğin, bir görüntü yüklerseniz, bir ndarraydöndürülür.

array[i,j] (i, j) konumundaki piksel değerini verir.

Ayrıca, imageROI için dizi dilimleme gibi kullanılabilir ROI=array[c1:c2,r1:r2]. Ayrı işlevlere gerek yok.

İki resim eklemek için herhangi bir işlevi çağırmaya gerek yoktur, sadece yapın res = img1+img2. (Ancak NumPy eklenmesi, görüntüler gibi uint8 dizileri için bir modulo işlemidir. Daha fazla bilgi için OpenCV ve Numpy'de Matris Aritmetiği arasındaki fark makalesine bakın .

Döndürülen konturlar, Numpy dizilerinin listeleridir. Kontürler - 1: Başlarken'deki Kontürler hakkında ayrıntılı bir tartışma bulabilirsiniz .

Kısacası, cv2 ile her şey basitleştirilmiş ve oldukça hızlıdır.

cv2Stack Overflow sorusunda NumPy hızının nasıl arttığına dair basit bir tartışma OpenCV-Python arabirimleri, cv ve cv2'nin performans karşılaştırması .

pyopencv :

Kullanmadığım için bu konuda pek bir şey bilmiyorum. Ancak daha fazla geliştirmeyi durdurmuş gibi görünüyor.

Resmi kütüphanelere bağlı kalmanın daha iyi olacağını düşünüyorum.

Kısaca cv2 kullanmanızı tavsiye ederim!

DÜZENLEME: cv2Modüle ilişkin kurulum prosedürünü Python için Windows'ta OpenCV'yi Yükleme bölümünde görebilirsiniz .


Kaynaklardan OpenCV oluşturuyorsanız, cv2 Python arayüzü derlenecek ve kurulacaktır. Linux veya diğer işletim sistemleri için ikili paketler kullanıyorsanız işletim sistemi / dağıtım belgelerinize başvurmalısınız. Yardım için goo.gl/MUjXi adresine bakın .
TH.

1
@Framester: bu bağlantıdaki cv2 kurulum prosedürüne bakın: opencvpython.blogspot.in/2012/05/…
Abid Rahman K

Abid'in cevabı harika. Bir nokta daha eklemek için: Python 3.x ile bir proje yaptım ve opencv'ye erişebilmemin tek yolu ctypes_opencv ve orijinal OpenCV 1.0'dı. OpenCV pre1.1 için destek olduğunu iddia ediyor ama ben onu hiç çalıştırmadım. Bununla, orijinal cvSetROI, vb. C-tipi arabirimi kullanacaksınız.
KobeJohn

Pip ile kurmak istiyorsanız. burayı okuyun veya yapın:pip install opencv-python
Timo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.