OpenCVやってみるの続きです。
やってみたいこと
ヤマザキ春のパン祭りのシールを集めています。
このシール点数集計がいいネタになるのではと。
OpenCVチュートリアル
OpenCVのチュートリアルを一度ざっと読んでみたので、これを元に春のパン祭り点数集計をやってみたいと思います。
Welcome to OpenCV-Python Tutorials’s documentation! — OpenCV-Python Tutorials 1 documentation
和訳されているページもあります。
OpenCV-Python チュートリアル文書のページへようこそ! — OpenCV-Python Tutorials 1 documentation
画像表示
まずはライブラリのインポート。
>>> import cv2
画像を読み込んで表示します。
>>> img = cv2.imread('harupan_200317_1.jpg', cv2.IMREAD_COLOR) >>> cv2.imshow('image', img) >>> cv2.waitKey(0)
- img変数に画像データを読み込み
- imshow関数でウィンドウを出し、画像を表示します。実際には、waitKey関数を呼んだ時点で表示されます。
waitKeyを呼ぶ前まではウィンドウ内はグレー一色になっています。
表示された画像。
元の解像度と一対一の倍率で表示されているようです。
縮小して全体を表示できるようにしたい。
ひとまず進めますが、この画像ウィンドウ上で適当なキーを押すと、pythonコンソールがまた入力可能な状態となります。
>>> cv2.imshow('image', img) >>> cv2.waitKey(0) 13 ← 画像ウィンドウ上でEnterキーを押した >>>
以下のdestroyAllWindows関数で画像ウィンドウを消します。
>>> cv2.destroyAllWindows()
画像のリサイズ
まず、shape
で画像サイズが得られます。
Python, OpenCV, Pillow(PIL)で画像サイズ(幅、高さ)を取得 | note.nkmk.me
>>> img.shape (4032, 3024, 3)
shape
はタプルになっています。今回はカラー画像なので、要素は(高さ, 幅, チャネル数)となっています。
タプルなので、アンパックを行います。
>>> h,w = img.shape[:2] >>> print('height:',h,'width:',w) height: 4032 width: 3024
resize
関数を使って、リサイズします。 shape
では(高さ, 幅)の順になっていましたが、
resize
関数の引数では(幅, 高さ)の順になるようです。
あと、整数型にしておかないとエラーメッセージが出たので、int
関数を使っています。
>>> img2 = cv2.resize(img, (w/10, h/10)) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: integer argument expected, got float >>> img2 = cv2.resize(img, (int(w/10), int(h/10))) >>> img2.shape (403, 302, 3) >>> cv2.imshow('image2', img2) >>> cv2.waitKey(0)
縮小された画像が表示されました。
ここまで
とりあえずここまで。
pythonもOpenCVも慣れていきたい。