Có
opencv
(thư viện từ những người OpenCV),cv
(thư viện cũ từ OpenCV guys) vàpyopencv
vớ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:
Chính thức, OpenCV phát hành hai loại giao diện Python cv
và cv2
.
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 cvMat
giống như trong C ++.
Đối với hoạt động mảng, có một số chức năng như cvSet2D
, cvGet2D
vv 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, cvSeq
cấ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 cv
và cv2
. Bây giờ, trong các bản phát hành mới nhất, chỉ có cv2
mô-đun và cv
là 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ư ndarray
và native Python
cá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. NumPy
là 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 ndarray
sẽ đượ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 cv2
trong 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 cv2
mô-đun trong Cài đặt OpenCV trong Windows cho Python .