2017年7月5日 更新

現役JDと学ぶ画像処理入門①〜openCV入門〜

openCV入門(画像の読み込み、表示、保存、線形変換、拡大縮小)

50,392 view お気に入り 1
画像をウィンドウまたはpython notebookで表示していきます
#ウィンドウで表示
#ウィンドウ名を決定
Window_name = 'Lenna'

#ウィンドウの作成 (ウィンドウ名、ウィンドウの表示形式)
cv2.namedWindow(Window_name, cv2.WINDOW_AUTOSIZE)

#ウィンドウに画像表示 (ウィンドウ名、表示する画像の配列)
cv2.imshow(Window_name, image)

#キーが押されるまで画像を表示したままにする
#0→無限、0以上→指定ミリ秒表示
cv2.waitKey(0)

#ウィンドウの破棄 (ウィンドウ名)
cv2.destroyWindow(Window_name)
window.py
#ipython notebookで表示
plt.imshow(image)
ipython notebook.py
さて、可愛いLennaちゃんを表示できたでしょうか??
これは余談なのですが、深夜に一人でPCをいじっているとごく稀に下のような真っ青なLennaちゃんが現れ、その目をじっと見つめていると...??という都市伝説があるそうな...
Lenna

Lenna

...なんて、嘘、嘘です!!そっとブラウザを閉じないでください!!!
実はOpenCVで画像を読み込むとRGB(レッド、グリーン、ブルーの配列)がBGR(ブルー、グリーン、レッド)の順に読み込まれるため、赤と青が反転したような画像になってしまうのです!
お詫びにちゃんと直し方も書いておきます。
#画像の色空間を変換。(入力ファイル名、(出力ファイル名)、色空間の変換コード)
#cv2.COLOR_BGR2RGBはBGR to RGB (BGRからRGBに変換)という意味。BGR2GRAYなどとするとグレースケール(白黒画像)になる。
rgb_image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
plt.imshow(rgb_image)
cvtColor.py
Lenna

Lenna

はい!Lennaちゃんが元どおりになったはずです!
最後に画像の保存方法です。
#(保存時のファイル名、保存する画像配列)
cv2.imwrite('new_lenna.jpg',image)
imwrite.py

アフィン変換による画像の平行移動&回転移動

アフィン変換を用いた画像の平行移動と回転移動を行います。
数学的な説明は後にして、とりあえず実装を行なっていきましょう!

まずは平行移動からです。
warpAffineメソッドの使い方に注目です!
#縦幅、横幅をそれぞれ取り出す
height, width = image.shape[:2]

#変換行列の指定 横にa,縦にb動かしたい時は[ 1, 0, a],[ 0, 1, b]とする。(詳しくは後ほど!)
M = np.float32([[1,0,100],[0,1,50]])

#画像を平行移動 (入力画像の配列、変換行列、出力画像サイズ)
moved_image  =  cv2.warpAffine(rgb_image, M, (width, height))
plt.imshow(moved_image)
moved.py
moved_image

moved_image

53 件

関連する記事 こんな記事も人気です♪

Pythonで画像処理 マスク処理

Pythonで画像処理 マスク処理

Pythonで画像を操作する方法を簡単に解説しています。
望月 優輝 | 24,604 view
Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

画像処理の一つ,モルフォロジー変換をPython と OpenCVのライブラリを用いて実装し,それを2値画像に対して適用します.
等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

前回の記事「等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 1」の続きです. 実際に実装をして,写像を確かめてみます.
画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像処理のセグメンテーションの分野で用いられるLevel set 法を用いて画像のセグメンテーションを行います.
画像の一部を消すInpainting という技術とその実装 (python)

画像の一部を消すInpainting という技術とその実装 (python)

Python + OpenCVにより,画像の修復の技術,「Inpainting 」の実装を行います.

この記事のキーワード

この記事のキュレーター

広部ゆりか 広部ゆりか