このページではPython-openCVを使って以下の画像のように、指定した画像を平滑化処理する方法をご紹介していきます。
平滑化と言われると何のことかわかりにくいと思いますが、要はぼかし処理ですね。
ただ単に処理方法を解説するだけではなく、処理の中で各ピクセルのRGB値がどのように変化しているのか、という点まで確認していこうと思います。
それではさっそくやっていきましょう。
※今回はPython上でOpenCVというライブラリを使用していきます。
インストールしていない人は、まずはインストール作業から始めましょう。
★Pythonのインストール方法以下から!
★openCVのインストール方法以下から!
画像を平滑化(blur)処理する方法
それではさっそくですが、以下が冒頭に紹介したような処理を実行してくれるサンプルコードです。
※処理したい画像がプログラム実行フォルダにsample.jpgという名前で保存されていることを前提に書いています。
import cv2
file_name='sample.jpg'
blur_size=(30,30)
img=cv2.imread(file_name,cv2.IMREAD_COLOR)
img=cv2.blur(img,blur_size)
cv2.imwrite('sample2.jpg',img)
こいつを実行すると、以下のベース画像(sample.jpg)が
こんな感じで出力されます。(sample2.jpg)
基本的には先ほどのコードのblur_sizeが画像のぼかし度を決めている部分になります。
この値を大きくするほどぼかし度が大きくなります。
blur処理の内容を確認してみる
次は先ほど実行した平滑化処理ではどのようなことが行われているのかを確認してみましょう。
それを確認するコードは以下の通りです。
import cv2
file_name='sample.jpg'
blur_size=(3,3)
img=cv2.imread(file_name,cv2.IMREAD_COLOR)
file=open('sample.txt','w')
for i in range(10):
for j in range(10):
file.write(str(img[i,j,0])+' ')
file.write('\n')
file.close()
img=cv2.blur(img,blur_size)
file=open('sample2.txt','w')
for i in range(10):
for j in range(10):
file.write(str(img[i,j,0])+' ')
file.write('\n')
file.close()
このコードでなにをやっているかと言うと、適当なサンプル画像の左上の縦横10ピクセル分のB値(RGBの青の度合い)を平滑化処理前後で出力しているだけです。
※先ほどのコードと違い、(3×3)ピクセルで平滑化処理をしています。
この処理を実行すると以下の2つのテキストファイルが出力されています。
(左が平滑化前のデータ、右が平滑化後のデータです。)
これが平滑化前後での画像の左上10ピクセル分のB値データです。
平滑化前後でこの数値がどのように変化しているのかを確認してみます。
以下の赤で囲った枠の中の数値に着目してみましょう。
右側の赤枠中心にある121という数値は、左側の同じ場所+周囲の8つの数値の平均値になっていることがわかると思います。
これこそがまさに平滑化(Blur)処理で実施している処理内容です。
隣の場所も確認してみましょう。
全く同じように処理されていることがわかると思います。
今回はRGBのB値のみで確認していますが、この処理が他の色(R値、G値)にも同様に適用されています。
これで平滑化処理ではどのようなことが行われているのかがイメージできたのではないでしょうか。
おわりに
というわけで今回はpython-openCVを使って、指定画像を平滑化(blur)処理する方法をご紹介しました。
ノイズ除去の際などにぜひご活用ください。
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント