Apa perbedaan antara semua antarmuka OpenCV Python ini?

88

Ada

Apa perbedaan utama dan mana yang harus saya gunakan?

Framester
sumber

Jawaban:

139

Secara resmi, OpenCV merilis dua jenis antarmuka Python, cvdan cv2.

CV:

Saya mulai bekerja cv. Dalam hal ini, semua tipe data OpenCV dipertahankan seperti itu. Misalnya, saat dimuat, gambar memiliki format cvMat, sama seperti di C ++.

Untuk operasi array, ada beberapa fungsi seperti cvSet2D, cvGet2D, dll Dan beberapa diskusi mengatakan, mereka lebih lambat.

Untuk imageROI, Anda memerlukan fungsi khusus seperti cvSetImageROI.

Jika Anda menemukan kontur, cvSeqstruktur dikembalikan yang tidak begitu baik untuk digunakan dibandingkan dengan daftar Python atau array NumPy.

(Dan menurut saya, pengembangannya akan segera dihentikan. Sebelumnya, hanya ada cv. Nanti, OpenCV hadir dengan keduanya cvdan cv2. Sekarang, di rilis terbaru, hanya ada cv2modul, dan cvada subclass di dalamnya cv2. Anda perlu memanggil import cv2.cv as cvuntuk mengaksesnya.)

cv2:

Dan yang terbaru adalah cv2. Dalam hal ini, semuanya dikembalikan sebagai NumPyobjek seperti ndarray dan native Pythonbenda seperti lists, tuples, dictionary, dll Jadi karena dukungan NumPy ini, Anda dapat melakukan operasi numpy sini. NumPyadalah pustaka pemrosesan larik yang sangat stabil dan cepat.

Misalnya, jika Anda memuat gambar, sebuah ndarraydikembalikan.

array[i,j] memberi Anda nilai piksel pada posisi (i, j).

Selain itu, untuk imageROI, pengiris larik dapat digunakan seperti ROI=array[c1:c2,r1:r2]. Tidak perlu fungsi terpisah.

Untuk menambahkan dua gambar, tidak perlu memanggil fungsi apa pun, lakukan saja res = img1+img2. (Tetapi penambahan NumPy adalah operasi modulo untuk array uint8 seperti gambar. Lihat artikel Perbedaan antara Aritmatika Matriks di OpenCV dan Numpy untuk mengetahui lebih lanjut.

Kontur yang dikembalikan adalah daftar array Numpy. Anda dapat menemukan pembahasan rinci tentang Kontur dalam Kontur - 1: Memulai .

Singkatnya, dengan cv2 semuanya disederhanakan dan cukup cepat.

Diskusi sederhana tentang bagaimana NumPy mempercepat cv2dalam pertanyaan Stack Overflow Perbandingan kinerja antarmuka OpenCV-Python, cv dan cv2 .

pyopencv :

Saya tidak tahu banyak tentang ini karena saya belum menggunakannya. Tetapi tampaknya telah menghentikan pengembangan lebih lanjut.

Saya pikir akan lebih baik untuk tetap menggunakan perpustakaan resmi.

Singkatnya, saya akan merekomendasikan Anda untuk menggunakan cv2!

EDIT: Anda dapat melihat prosedur instalasi untuk cv2modul di Instal OpenCV di Windows untuk Python .

Abid Rahman K
sumber
cv2 Python interface akan dikompilasi dan diinstal jika Anda membangun OpenCV dari sumbernya. Jika Anda menggunakan paket biner untuk Linux atau OS lain, Anda harus membaca dokumentasi OS / distribusi Anda. Lihat goo.gl/MUjXi untuk bantuan.
TH.
1
@Framester: lihat prosedur instalasi untuk cv2 di tautan ini: opencvpython.blogspot.in/2012/05/…
Abid Rahman K
Jawaban Abid bagus. Hanya untuk menambahkan satu poin lagi: Saya melakukan proyek dengan Python 3.x dan satu-satunya cara saya bisa mendapatkan akses ke opencv adalah melalui ctypes_opencv dan OpenCV 1.0 asli. Ini mengklaim dukungan untuk OpenCV pre1.1 tetapi saya tidak pernah berhasil. Dengan itu, Anda akan menggunakan antarmuka asli cvSetROI, dll. C-type.
KobeJohn
Jika Anda ingin menginstalnya dengan pip. baca di sini atau lakukan:pip install opencv-python
Timo