目次
【サイト内の関連ページ】
システム 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 開発環境) のインストール: : 別ページで説明している.
コマンドプロンプトで次のコマンドを実行
python -m pip install -U opencv-python
端末で次のコマンドを実行
sudo apt -y update sudo apt -y install libopencv-dev python3-opencv
端末で次のコマンドを実行
sudo apt -y update sudo apt -y install libopencv-dev python3-opencv python3-opencv-apps
USB接続できるビデオカメラを準備し,パソコンに接続しておく.
Python プログラムを動かすために, Windows では「python」, Ubuntu では「python3」などのコマンドを使う.
あるいは, 開発環境や Python コンソール(Jupyter Qt Console,Spyder,PyCharm,PyScripter など)の利用も便利である.
あるいは,オンラインで動くGoogle Colaboratory のノートブックの利用も,場合によっては便利である.
import cv2
import numpy as np
v = cv2.VideoCapture(0)
while(v.isOpened()):
r, f = v.read()
if ( r == False ):
break
cv2.imshow("", f)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v.release()
cv2.destroyAllWindows()
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる
USB接続できるビデオカメラを準備し,パソコンに接続しておく.
import cv2
import numpy as np
v = cv2.VideoCapture(0)
while(v.isOpened()):
r, f = v.read()
if ( r == False ):
break
mono = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
cv2.imshow("", mono)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v.release()
cv2.destroyAllWindows()
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる
USB接続できるビデオカメラを準備し,パソコンに接続しておく.
import cv2
import numpy as np
v = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
IMROOT="C:/image/"
out = cv2.VideoWriter(IMROOT + 'output.avi', fourcc, 20.0, (640, 480), False)
while(v.isOpened()):
r, f = v.read()
if ( r == False ):
break
mono = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
cv2.imshow("", mono)
out.write(mono)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v.release()
out.release()
cv2.destroyAllWindows()
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる
止めると、ビデオファイル C:/image/output.avi ができる。ディレクトリ C:/image は前もって作っておくこと
ヒストグラム平坦化は、モノクロ画像の表示をあざやかにするなどで役に立つ方法
USB接続できるビデオカメラを準備し,パソコンに接続しておく.
import cv2
import numpy as np
v = cv2.VideoCapture(0)
while(v.isOpened()):
r, f = v.read()
if ( r == False ):
break
mono = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
equ = cv2.equalizeHist(mono)
cv2.imshow("", equ)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v.release()
cv2.destroyAllWindows()
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる
import cv2
import numpy as np
v = cv2.VideoCapture(0)
while(v.isOpened()):
r, f = v.read()
if ( r == False ):
break
mono = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
r, dst = cv2.threshold(mono, 0, 255, cv2.THRESH_OTSU)
cv2.imshow("", dst)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v.release()
cv2.destroyAllWindows()
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる
ここでの輪郭抽出は、2値化の結果を利用して輪郭を抽出している
import cv2
import numpy as np
v = cv2.VideoCapture(0)
while(v.isOpened()):
r, f = v.read()
if ( r == False ):
break
mono = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
r, dst = cv2.threshold(mono, 0, 255, cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(dst, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(f, contours, -1, (0, 255, 0), 3)
cv2.imshow("", f)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v.release()
cv2.destroyAllWindows()
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる
ここで使用するビデオファイル:sample1.mp4
このビデオファイルのダウンロードは, Windows でコマンドプロンプトを管理者として実行し, 次のコマンドを実行.
mkdir c:\image cd c:\image curl -O https://www.kkaneko.jp/sample/face/sample1.mp4
上のコマンドがうまく
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる
ここでの輪郭抽出は、2値化の結果を利用して輪郭を抽出している
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる
次のことを行う
※ 止めたいとき,右上の「x」をクリックしない.画面の中をクリックしてから,「q」のキーを押して閉じる
1列目:フレーム番号、2列目:OTSU の方法による2値化の結果白色となった画素数、3列目:L成分の平均、4列目:a成分の平均、5列目:b成分の平均
OTSU の方法による2値化
import cv2
import numpy as np
IMROOT="C:/image/"
v = cv2.VideoCapture(IMROOT + 'sample1.mp4')
while(v.isOpened()):
r, f = v.read()
if ( r == False ):
break
mono = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
r, dst = cv2.threshold(mono, 0, 255, cv2.THRESH_OTSU)
cv2.imshow("f", f)
cv2.imshow("dst", dst)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v.release()
cv2.destroyAllWindows()
輪郭抽出
import cv2
import numpy as np
IMROOT="C:/image/"
v = cv2.VideoCapture(IMROOT + 'sample1.mp4')
while(v.isOpened()):
r, f = v.read()
if ( r == False ):
break
mono = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
r, dst = cv2.threshold(mono, 0, 255, cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(dst, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(f, contours, -1, (0, 255, 0), 3)
cv2.imshow("f", f)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v.release()
cv2.destroyAllWindows()
OTSU の方法による2値化のあと, 数え上げと画素値の平均
import cv2
import numpy as np
IMROOT="C:/image/"
v = cv2.VideoCapture(IMROOT + 'sample1.mp4')
i = 0
res = open(IMROOT + 'result.csv', mode='a')
while(v.isOpened()):
r, f = v.read()
if ( r == False ):
break
mono = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
r, dst = cv2.threshold(mono, 0, 255, cv2.THRESH_OTSU)
lab = cv2.cvtColor(f, cv2.COLOR_BGR2LAB)
cv2.imshow("f", f)
cv2.imshow("dst", dst)
cv2.imshow("L", lab[:,:,0])
cv2.imshow("A", lab[:,:,1])
cv2.imshow("B", lab[:,:,2])
total = np.sum(dst)
print( "%d, %d, %f, %f, %f" % (i, total, np.sum(lab[:,:,0])/total, np.sum(lab[:,:,1])/total, np.sum(lab[:,:,2])/total ) )
res.write( "%d, %d, %f, %f, %f\n" % (i, total, np.sum(lab[:,:,0])/total, np.sum(lab[:,:,1])/total, np.sum(lab[:,:,2])/total ) )
i = i + 1
if cv2.waitKey(1) & 0xFF == ord('q'):
break
v.release()
res.close()
cv2.destroyAllWindows()