【サイト内の関連ページ】
前準備として,Python プログラミングのインストールが終わっていること.
システム Python を使うことができる(その場合,Python のインストールは行わない)
システム Python を用いるときは,pip, setuptools の更新は次のコマンドで行う.
sudo apt -y update sudo apt -y install python3-pip python3-setuptools
Ubuntu で,システム Python 以外の Python をインストールしたい場合は pyenv が便利である: 別ページで説明している.
Python の URL: http://www.python.org/
【Python, pip の使い方】
Python, pip は,次のコマンドで起動できる.
【Python 開発環境のインストール】
JupyterLab, spyder, nteract (Python 開発環境) のインストールは, Windows でコマンドプロンプトを管理者として実行し, 次のコマンドを実行.
python -m pip install -U pip setuptools jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
詳しくは,: 別ページで説明している.
JupyterLab, spyder, nteract (Python 開発環境) のインストール: : 別ページで説明している.
※ Windows では「python」,Ubuntu では「sudo python3 -m pip」
python -m pip install -U opencv-python
パソコン接続できるビデオカメラ 2台を準備し,パソコンに接続しておく.
Python プログラムを動かすために, Windows では「python」, Ubuntu では「python3」などのコマンドを使う.
あるいは, 開発環境や Python コンソール(Jupyter Qt Console,Spyder,PyCharm,PyScripter など)の利用も便利である.
あるいは,オンラインで動くGoogle Colaboratory のノートブックの利用も,場合によっては便利である.
import cv2
import numpy as np
v0 = cv2.VideoCapture(0)
v1 = cv2.VideoCapture(1)
while( ( v0.isOpened() ) and ( v1.isOpened() ) ):
r0, bgr0 = v0.read()
if ( r0 == False ):
break
r1, bgr1 = v1.read()
if ( r1 == False ):
break
cv2.imshow("0", bgr0)
cv2.imshow("1", bgr1)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v0.release()
v1.release()
cv2.destroyAllWindows()
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる
ステレオ画像のうち1枚を、平行移動による位置合わせ
import cv2
import numpy as np
v0 = cv2.VideoCapture(0)
v1 = cv2.VideoCapture(1)
while( ( v0.isOpened() ) and ( v1.isOpened() ) ):
r0, bgr0 = v0.read()
if ( r0 == False ):
break
r1, bgr1 = v1.read()
if ( r1 == False ):
break
mono0 = cv2.cvtColor(bgr0, cv2.COLOR_BGR2GRAY)
mono1 = cv2.cvtColor(bgr1, cv2.COLOR_BGR2GRAY)
f0 = np.array( mono0, dtype='float32')
f1 = np.array( mono1, dtype='float32')
dxdy, response = cv2.phaseCorrelate(f0, f1)
print(dxdy[0], dxdy[1])
bgr0after = cv2.warpAffine(bgr0, np.float32([[1, 0, dxdy[0]], [0, 1, dxdy[1]]]), (f0.shape[1], f0.shape[0]))
cv2.imshow("bgr0", bgr0)
cv2.imshow("bgr1", bgr1)
cv2.imshow("bgr0after", bgr0after)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v0.release()
v1.release()
cv2.destroyAllWindows()
import cv2
import numpy as np
v0 = cv2.VideoCapture(0)
v1 = cv2.VideoCapture(1)
while( ( v0.isOpened() ) and ( v1.isOpened() ) ):
r0, bgr0 = v0.read()
if ( r0 == False ):
break
r1, bgr1 = v1.read()
if ( r1 == False ):
break
mono0 = cv2.cvtColor(bgr0, cv2.COLOR_BGR2GRAY)
mono1 = cv2.cvtColor(bgr1, cv2.COLOR_BGR2GRAY)
f0 = np.array( mono0, dtype='float32')
f1 = np.array( mono1, dtype='float32')
dxdy, response = cv2.phaseCorrelate(f0, f1)
print(dxdy[0], dxdy[1])
bgr0after = cv2.warpAffine(bgr0, np.float32([[1, 0, dxdy[0]], [0, 1, dxdy[1]]]), (bgr0.shape[1], bgr0.shape[0]))
window_size = 3
min_disp = 16
num_disp = 112-min_disp
stereo = cv2.StereoSGBM_create(minDisparity = min_disp,
numDisparities = num_disp,
blockSize = 8,
P1 = 8*3*window_size**2,
P2 = 32*3*window_size**2,
disp12MaxDiff = 1,
uniquenessRatio = 10,
speckleWindowSize = 200,
speckleRange = 1
)
disparity = stereo.compute(bgr0after, bgr1).astype(np.float32) / 16.0
cv2.imshow("bgr0", bgr0)
cv2.imshow("bgr1", bgr1)
cv2.imshow("bgr0after", bgr0after)
cv2.imshow('disparity', (disparity-min_disp)/num_disp)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v0.release()
v1.release()
cv2.destroyAllWindows()
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる