OpenCV là một thư viện xử lý ảnh viết bằng C/C++, có thể nói là chuẩn mực để ai mới nhập môn xử lý ảnh cũng phải học và dùng đến. OpenCV có thể chạy trên nhiều hệ điều hành Win, Mac, Linux và kiến trúc vi xử lý khác nhau: Intel, ARM...

Có 2 cách để cài đặt OpenCV lên một hệ điều hành:

  1. Tải mã nguồn về rồi tự build. Cách này chúng ta có thể bật, tắt tuỳ chọn để thêm bớt các chức năng phụ
  2. Tải bản binary về: đơn giản, dễ cho người mới bắt đầu

Trước tiên tôi trình bày cách 2, tải bản binary về.

Bước 1: Hãy cài đặt Home Brew . HomeBrew là trình quản lý, cài đặt thêm các gói phần mềm mã nguồn mở lên MacOSX tương tự như apt-get trong Ubuntu, Debian

Bước 2: Mở terminal gõ lệnh brew info opencv để biết phiên bản opencv sẽ cài lên máy

$ brew info opencv

opencv: stable 4.1.0 (bottled)
Open source computer vision library
https://opencv.org/
...
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/opencv.rb
==> Dependencies
Build: cmake ✔, pkg-config ✔
Required: eigen ✔, ffmpeg ✔, glog ✔, harfbuzz ✔, jpeg ✔, libpng ✔, libtiff ✔, numpy ✔, openexr ✔, python ✔, python@2 ✔, tbb ✔

Bước 3: Gõ lệnh brew install opencv

Sau bước 3 chúng ta sẽ cài đặt thư viện Python sử dụng OpenCV có tên là opencv-python. Để lập trình opencv trong Python cần chuẩn bị:

  • Python 3.7.x
  • Tạo Virtual Environment để có thể cài các gói package phiên bản khác nhau cho các dự án lập trình độc lập
  • Kích hoạt Virtual Environment

Bước 4: Cài đặt opencv-python
Nếu bạn lập trình desktop cần xem kết quả opencv xử lý thì

pip install opencv-python
pip install opencv-contrib-python

Nếu opencv xử lý âm thầm trên server không cần hiển thị giao diện thì cài

pip install opencv-python-headless
pip install opencv-contrib-python-headless

Bước 5: Kiểm tra opencv-python đã chạy ổn chưa bằng tạo một file Python chuyển đổi ảnh RGB sang màu xám

import cv2

print("OpenCV version:")
print(cv2.__version__)

img = cv2.imread("ferrario.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow("Over the Clouds", img)
cv2.imshow("Over the Clouds - gray", gray)
cv2.waitKey(0)
cv2.destroyAllWindows()

Color vs Gray

Nhược điểm của cách cài binary biên dịch sẵn là nó không đóng gói sẵn một số thuật toán thương mại hoá. Thử chạy đoạn lệnh Python này, bạn sẽ thấy lỗi 
This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library...

import cv2
import matplotlib.pyplot as plt

img_fname = 'ferrario1.jpg'  # assuming this is where you
# downloaded the above image
# load image
img = cv2.imread(img_fname)
if img is None:
    raise ValueError('{} is not a file'.format(img_fname))
# convert to grayscale
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# instantiate SURF
surf = cv2.xfeatures2d.SURF_create(7000)
# compute keypoints
keypoints = surf.detect(img_gray, None)
# plot keypoints
img_keypoints = cv2.drawKeypoints(img, keypoints, img, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
img_keypoints_rgb = cv2.cvtColor(img_keypoints, cv2.COLOR_BGR2RGB)
plt.imshow(img_keypoints_rgb)
plt.show()