Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【python3, opencv】はじめての画像解析

はじめて画像解析をpythonopen cvを使ってやることになったのでそのメモ
(すでに画像解析の記事はあるので、はじめてのはおかしいが・・・・)

パッケージのインストール

conda install opencv

ピクセルの取得

読み込んだ画像は2次元のピクセルへの通し番号とそのピクセルでの色の値が書かれている
ここでは、gray scaleにしてから解析するので、RGBの色情報を0~255に変換してから使う

読み込んだ画像の幅や高さは以下から

参考までに2822x4144の画像で10~22MBだった

■ 参考 : Python, OpenCV, Pillow(PIL)で画像サイズ(幅、高さ)を取得

画像のピクセルは(0, 0)から(height, width)まであるとすると、
(0, 0)の点は画像の左上
左下が(height, 0)
右下が(height, width)
右上が(0, width)
なことに注意

最後にプロットするときは少し反転などを加えないといけない
matplotlibのオプションで、xlimとylimを入れ替えれば良さそう


pngtiffファイルをカラーで読み込んだ場合は、返り値は3つ
白黒として読み込んだら、返り値は2つ

height, width, _ = img.shape

円を書きたいなら

cv2.circle(img, (190, 35), 15, (255, 255, 255), thickness=-1)
最後のticknessは-1なら塗りつぶし、0より大きい数字ならその太さの線になる
(190, 35) が円の中心
15が円の半径
単位はピクセル

長方形とかの場合は以下から

■ 参考 : Python, OpenCVで図形描画(線、長方形、円、矢印、文字など)



円形のドーナツ型のフィルターを作って黒く塗りつぶしたい

良い例があった

■ 参考 :リング型のマスク画像を作る方法


opencvの色について

open cv上では色は

  • (255, 255, 255)が白
  • (0, 0, 0)が黒
  • (255, 0, 255)がマゼンタ
  • (255 , 0, 0)が青

cv2で画像を読み込むと色はBGRになっている(普通はRGB)
matplotlibではRGBなので注意が必要
それを踏まえて、matplotlibで表示するときは以下のような換算が必要
img_orig = cv2.cvtColor(img_orig, cv2.COLOR_BGR2RGB)

■ 参考 :Python, OpenCVでBGRとRGBを変換するcvtColor


ランキング参加中です

↓クリックしていただけると嬉しいです〜