プログラミング

Pythonで画像編集するOpenCVコードをまとめてみた

投稿日:

Pythonを勉強している学生が、OpenCVを使って画像の簡単な編集をPythonで実現するためのコードをまとめてみました。私と同様にOpenCVって何?って人向けにOpenCVについての知りたいような情報も追記しました。

OpenCVの使い方がわからずに悩んでいる方のお役に立てればと思います。

参考にしている書籍は、PythonによるAI・機械学習・深層学習アプリのつくり方です。こちらの書籍を見ながらこの記事を見ていただければ理解しやすいと思います。

 

 

■OpenCVのモジュールを使ったコードまとめ

この記事で扱う画像は、イラスト屋からお借りしてきたものを使います。参考までに載せておきます。

さっそく画像の読み込みから始めていきましょう!

・画像を読み込む

まず初めに画像を読み込むコードです。画像の読み込みには、imreadモジュールを使います。以下のコードを確認してください。

 

imread(“画像ファイルの名前”)のように記述します。注意点としては、画像ファイル名の拡張子まで指定することです。 正しく画像ファイルが読み込まれると、以下のように画素データが行列形式で出力されることを確認しましょう。

私の読み込んだ画像は、背景に色がないため、0の羅列のように表示されてしまいましたが、これはこれで問題ないです。

拡張子を記述しなかったり、ファイル名が間違っていると、Noneと表示されるので、その場合、ファイル名を正しく記述し直してみてください。

 

画像の読み込みはここまでです。次は読み込んだ画像を表示してみましょう。

ターミナル、もしくはコンソール内で、matplotlibモジュールをインストールしてください。

 

以下のようにコードを変更します。

OpenCVの色配置は、[青、緑、赤(BGR)]、matplotlibの色配置は、[赤、緑、青(RGB)]なので、plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))により、色配置をRGBへ変更。

show()はそのままの意味で、画像を表示しています。

 

 

・画像を保存する

画像の保存は、imwrite()モジュールを使います。以下のコードを確認してください。

imwrite(“保存するときのファイル名”, 画像を代入した変数)のように記述します。

 

OpenCVは、代表的な画像形式をサポートしているので、自分の好きな形式が選べますよ。

 

出力されたresult.pngを以下に載せます。

!!!背景の色が変わっている。。。これは、画像を読み込むときに透明だった部分に[0 0 0]という行列が与えられたためだと思われます。

そして[0 0 0]がさす色は黒なので、背景が「透明」→「黒」に代わってしまったんですね。「透明」部分は出力されると「黒色」に変わることが覚えれたのでまあ良かったとしよう。。。

 

・画像をリサイズする

画像をリサイズするコードは以下になります。

img_res = cv2.resize(リサイズしたい画像, (幅,高さ))で画像をリサイズします。今回使った画像は(400, 300)→(800,300)にしてみました。結果は以下の画像です。横幅が800、縦幅が300にリサイズできてますね。

 

 

・画像を切り取る

画像の切り取りは、以下のコードです。

img_res = img[100:500, 100:500]の部分で、x座標が100~500、y座標が100~500の範囲の画素データのみを抽出して切り取りを行っています。

結果は以下のようになりました。

 

スポンサーリンク

■OpenCVとは

OpenCVは、Open Source Computer Vision Libraryの略で、意味はそのままのオープンソースの画像ライブラリのことを指します。もともとはインテルが開発し、公開しました。

概要はwikipediaから抜粋させていただきます。

画像処理・画像解析および機械学習等の機能を持つC/C++、Java、Python、MATLAB用ライブラリ[3]。プラットフォームとしてmacOSやFreeBSD等全てのPOSIXに準拠したUnix系OS、Linux、Windows、Android、iOS等をサポートしている。

上記のように、あらゆるプログラミング言語で扱えるかつ、OSのサポートも充実していることが最大の魅力。

できることは、画像処理、機械学習、パターン認識などといろいろあり、PythonとOpenCVを使えば顔認識や文字認識もできちゃいます。

私はOpenCV=画像処理の強力なライブラリって認識しています。

 

■まとめ

今回紹介したコードが使えるのは以下のような場面です。

・画像を読み込みたいとき(imread)
・画像を保存したいとき(imwrite)
・画像を拡大縮小したいとき(resize)
・画像を切り抜きたいとき(配列指定)
・画像の色を変換したいとき(imshow)

OpenCVは画像処理を行うための強力なライブラリなので覚えていきたいと思います。

次回紹介する顔検出でもOpenCVを使うので、画像認識をしたい人には必須になりそうですね。特に今回紹介したコードはどれも処理を行うときには必ず使うものばかりなので覚えておきましょう。

 

最後まで読んでいただきありがとうございました。

 

スポンサーリンク

 

当サイト(your-3d.com)の管理人のゆあーさんと申します。

このサイトでは、私がZBrushやunityなどで調べたことをわかりやすく共有出来たらいいなと思い開設しました。

読んでくださった皆様のお役に立てたら幸いです。

 

Twitter:

@yoursun3d

 

Booth(3Dモデル販売してます!):

https://your-3d.booth.pm/

 

Amazonほしいものリスト:

https://www.amazon.jp/hz/wishlist/ls/YIXXWB7FVXHG?ref_=wl_share