Pythonの学習の過程とか

学習の記録をつけておきましょう。Python3に少しずつ移行していきます。過去の記事のソースを2から3に、、、と考えましたが、新しいことをやったほうがいいですね。

Python OpenCVの基礎 画像の読み込み(静止画)

画像の読み込みから始めてみたいと思います。 画像操作の基本ですね。

前提としてPython(2.7系)、OpenCVのインストールなどを済ませておきましょう。 検索すれば色々出てきますのでよろしくお願いします。

さて始めます

今回から参考にするページはコチラです。

Getting Started with Images — OpenCV-Python Tutorials 1 documentation

Pythonの中ではOpneCVはcv2をimportして使っていきます。

#こうやってimportします。numpyもimportする必要があるようです。
import numpy as np
import cv2

画像の読み込み

imread

imreadの概要です。

imread(filename[,flag])

filename : 読み込む対象のファイルですね。flagはオプションです。

  • cv2.IMREAD_COLOR (デフォルト。カラーモードで読み込みます。アルファチャンネルは読み込みません)
  • cv2.IMREAD_GRAYSCALE(画像をグレースケールで読み込みます)
  • cv2.IMREAD_UNCHANGED(画像をそのまま読み込みます。アルファチャンネルも読み込みます)

フラグは、それぞれ文字列の代わりに1,0,-1と設定することもできます。

では画像を読み込んでみましょう。

この画像でいきましょう

f:id:PeaceAndHiLight:20151223203940j:plain

import numpy as np
import cv2

#画像の読み込み
img = imread('filename', cv2.IMREAD_GRAYSCALE)

#または
#img = imread('filename', 0)

。。。。実行しても何も起きません。。。まだ読み込んだだけですからね。表示したり保存しなければ読み込みが確認できません。

ではこれを画面に表示させるところをやってみましょう。

画像の表示

imshow

imshow(windowname, img)

windownameは、表示時のウインドウの名前(タイトルバーに表示される)になります。 imgは読み込み済みの画像オブジェクトですね。

これで表示させてみましょう。

今回はグレースケールで読み込んで表示させてみます。

#coding: utf-8
 
import numpy as np
import cv2
 
img = cv2.imread('filename', cv2.IMREAD_GRAYSCALE)

cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

はい、こんな感じでwindowに表示されました。簡単ですね!ウインドウの名前を"image"に設定したのがわかると思います。

f:id:PeaceAndHiLight:20151223205532p:plain

何かしらキーを押すことでウインドウは閉じます(destroyWindow()があるので、ウインドウは破棄されます)

わかりやすいですね。

でもこれスクリーンショットなんです。 この時点ではまだ画像は保存できていません。やっぱり画像を保存できたほうがいいですよね。 そこで次は画像を保存します。

画像の保存

imwrite

画像の保存もなんとなくイメージができると思います。

imwrite(imagename, img)

imagenameに任意のファイル名を設定し、imgオブジェクトを保存します。 この時imagenameで拡張子を指定することができます。

#coding: utf-8
 
import numpy as np
import cv2
 
img = cv2.imread('filename', cv2.IMREAD_GRAYSCALE)

#forsaleという名前でjpeg保存
cv2.imwrite('forsale.jpg', img)

#forsale2というpngを保存
cv2.imwrite('forsale.png', img)

今回はjpegpngの二種類の画像を保存してみました。

さて、これで画像の読み込み、表示、保存がイメージできたでしょうか?

最後のおまけをひとつ。

画像を読み込んで表示させ、escが押されたらそのまま終了し、sが押されたら保存するプログラムを作ります。 これも簡単ですね。

#coding: utf-8
 
import numpy as np
import cv2
 
#読み込み
img = cv2.imread('filename', cv2.IMREAD_GRAYSCALE)

#表示
cv2.imshow('image', img)

#キーボード入力を受け付ける
key = cv2.waitKey(0)

if key == 27:            #escの処理
    cv2.destroyAllWindows()   
elif k == ord('s'):      #sの入力の処理
    cv2.imwrite('forsale.jpg', img)
    cv2.destroyAllWindows()

初回はこんな感じでいかがでしょうか???

詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識

詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識