Python OpenCV3 - eiichiromomma/CVMLAB GitHub Wiki

(Python) OpenCV3

PythonでOpenCV3を使う際の作業メモ

OpenCVも参照

WindowsのPython3.6(Anaconda)でのopencv3 (2017/4/11)

Python3.6には未対応なので、whlファイルを拾ってきてpipでインストールする ここからopencv_python‑3.2.0+contrib‑cp36‑cp36m‑win_amd64.whl を拾ってきて(Downloadsにある前提)

pip install Downloads\opencv_python‑3.2.0+contrib‑cp36‑cp36m‑win_amd64.whl

でインストールできる。

macOSやUbuntuでのビルド

OpenCVの方を参照。

移行時のポイント

変数の変更

  #opencv2
  # capture.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH, 640)
  # capture.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, 480)
  #opencv3
  capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
  capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

SIFT, SURFあたりの変更点

SIFT, SURFはxfeatures2dに移動しコンストラクタもSURF()からSURF_createのように_createが付くようになった。設定はset/getに。

  #opencv2
  # surf = cv2.SURF(250)
  # surf.upright = True
  # surf.extended = True
  #opencv3
  surf = cv2.xfeatures2d.SURF_create(250)
  surf.setUpright(True)
  surf.setExtended(True)  

cv2.FeatureDetector_create("Dense")の廃止

決め打ちなので座標のarrayを作って整形してからcv2.KeyPoint_convertに渡せば良い。下記は36x36の画像に6おきのグリッド。座標作成の実装は適当なので注意。(Xは画像のリスト)

  # create dense grid of keypoints
  #opencv2
  #dense = cv2.FeatureDetector_create("Dense")
  #kp = dense.detect(np.zeros(small_size).astype(np.uint8))
  #opencv3
  x = np.zeros(6)
  y = np.linspace(0,30,6)
  pts = np.c_[x,y]
  step = np.linspace(6,30,5)
  for i in step:
      x = np.ones(len(y))*i
      pt =  np.c_[x,y]
      pts = np.r_[pts, pt]
  kp = cv2.KeyPoint_convert(pts.reshape(-1,1,2))
  # compute keypoints and descriptors
  kp_des = [surf.compute(x, kp) for x in X]