勉強しないとな~blog

ちゃんと勉強せねば…な電気設計エンジニアです。

OpenCVやってみる-2. 画像表示

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を呼ぶ前まではウィンドウ内はグレー一色になっています。

表示された画像。

f:id:nokixa:20210315234057p:plain

元の解像度と一対一の倍率で表示されているようです。
縮小して全体を表示できるようにしたい。

ひとまず進めますが、この画像ウィンドウ上で適当なキーを押すと、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関数の引数では(幅, 高さ)の順になるようです。

OpenCVで画像サイズの変更をしてみた - Qiita

あと、整数型にしておかないとエラーメッセージが出たので、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)

縮小された画像が表示されました。

f:id:nokixa:20210317224642p:plain

ここまで

とりあえずここまで。
pythonOpenCVも慣れていきたい。