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]