Điều gì khác biệt giữa tất cả các giao diện OpenCV Python này?


88

  • opencv (thư viện từ những người OpenCV),
  • cv (thư viện cũ từ OpenCV guys) và
  • pyopencvvới người tiền nhiệm của nó ctypes-opencv.

Sự khác biệt chính là gì và tôi nên sử dụng cái nào?

Câu trả lời:


138

Chính thức, OpenCV phát hành hai loại giao diện Python cvcv2.

cv:

Tôi bắt đầu làm việc cv. Trong điều này, tất cả các kiểu dữ liệu OpenCV được giữ nguyên như vậy. Ví dụ: khi được tải, hình ảnh có định dạng cvMatgiống như trong C ++.

Đối với hoạt động mảng, có một số chức năng như cvSet2D, cvGet2Dvv Và một số cuộc thảo luận nói, họ đang chậm.

Đối với imageROI, bạn cần các chức năng đặc biệt như cvSetImageROI.

Nếu bạn tìm thấy các đường bao, cvSeqcấu trúc được trả về không tốt để làm việc so với danh sách Python hoặc mảng NumPy.

(Và tôi nghĩ, sự phát triển của nó sẽ sớm bị dừng lại. Trước đó, chỉ có cv. Sau này, OpenCV có cả hai cvcv2. Bây giờ, trong các bản phát hành mới nhất, chỉ có cv2mô-đun và cvlà một lớp con bên trong cv2. Bạn cần gọi import cv2.cv as cvđể truy cập nó.)

cv2:

Và cái mới nhất là cv2. Trong đó, tất cả mọi thứ sẽ được trả về như NumPyđối tượng như ndarraynative Pythoncác đối tượng như lists, tuples, dictionary, vv Vì vậy, do hỗ trợ NumPy này, bạn có thể làm bất kỳ hoạt động NumPy đây. NumPylà một thư viện xử lý mảng nhanh và ổn định cao.

Ví dụ: nếu bạn tải một hình ảnh, một ndarraysẽ được trả về.

array[i,j] cung cấp cho bạn giá trị pixel tại vị trí (i, j).

Ngoài ra, đối với imageROI, cắt mảng có thể được sử dụng như ROI=array[c1:c2,r1:r2]. Không cần các chức năng riêng biệt.

Để thêm hai hình ảnh, không cần phải gọi bất kỳ chức năng nào, chỉ cần thực hiện res = img1+img2. (Nhưng bổ sung NumPy là một hoạt động mô-đun cho các mảng uint8 như hình ảnh. Hãy xem bài viết Sự khác biệt giữa Số học Ma trận trong OpenCV và Numpy để biết thêm.

Các đường bao được trả về là danh sách các mảng Numpy. Bạn có thể tìm thấy một cuộc thảo luận chi tiết về Contours in Contours - 1: Bắt đầu .

Tóm lại, với cv2, mọi thứ được đơn giản hóa và khá nhanh chóng.

Một cuộc thảo luận đơn giản về cách NumPy tăng tốc cv2trong câu hỏi Stack Overflow So sánh hiệu suất của các giao diện OpenCV-Python, cv và cv2 .

pyopencv :

Tôi không biết nhiều về điều này vì tôi chưa sử dụng nó. Nhưng nó dường như đã ngừng phát triển thêm.

Tôi nghĩ sẽ tốt hơn nếu tiếp tục sử dụng các thư viện chính thức.

Tóm lại, tôi khuyên bạn nên sử dụng cv2!

CHỈNH SỬA: Bạn có thể xem quy trình cài đặt cho cv2mô-đun trong Cài đặt OpenCV trong Windows cho Python .


Giao diện Python cv2 sẽ được biên dịch và cài đặt nếu bạn đang xây dựng OpenCV từ các nguồn. Nếu bạn đang sử dụng gói nhị phân cho Linux hoặc hệ điều hành khác, bạn nên tham khảo tài liệu về hệ điều hành / phân phối của mình. Xem goo.gl/MUjXi để được trợ giúp.
TH.

1
@Framester: xem quy trình cài đặt cv2 trong liên kết này: opencvpython.blogspot.in/2012/05/…
Abid Rahman K

Câu trả lời của Abid rất tuyệt. Chỉ cần thêm một điểm nữa: Tôi đã thực hiện một dự án với Python 3.x và cách duy nhất tôi có thể truy cập vào opencv là thông qua ctypes_opencv và OpenCV 1.0 ban đầu. Nó tuyên bố hỗ trợ cho OpenCV pre1.1 nhưng tôi chưa bao giờ làm cho nó hoạt động. Cùng với đó, bạn sẽ sử dụng giao diện C-type cvSetROI, v.v.
KobeJohn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.