ヒガサラblog

サラリーマン向けに、仕事を効率良く進めていくための方法についてご紹介しています。プログラミングから対人スキルまでを幅広く掲載中。

ヒガサラblog

【python-openCV】画像の縁に黒枠を追加する方法!numpy活用演習!

 

f:id:yshgs_elec:20210121222748j:plain

この記事では、python&openCVを使い、

画像の外周部分に指定したピクセル数&色で縁を追加する方法をご紹介します。

 

処理内容としては、それほどおもしろいものではありませんが、この記事の内容を理解することで、numpyを使った画像の配列処理を学ぶことができます。

  

実際の画像を使って詳細解説していきますので、ぜひ最後までご覧ください。 

 

それでは早速やっていきます!

 

スポンサーリンク

 

紹介スキルの概要説明

冒頭でもすこしふれましたが、この記事では、以下の画像のように、既存の画像に縁を追加する方法をご紹介していきます。

※縁の色や、縁の太さも自由に変更することが可能です。

f:id:yshgs_elec:20210204155124j:plain

 

サンプルコードの紹介

◆画像に外枠を追加するサンプルコード

#ライブラリインポート
import cv2
import numpy as np
#画像ファイル名宣言
pic_name="mikan.jpg"
pic_name_out="mikan_out.jpg"
#追加枠ピクセル数
num_insert=50
#画像読み込み
img = cv2.imread(pic_name,cv2.IMREAD_COLOR)
#枠追加処理(上下)
bk1=np.zeros((num_insert,img.shape[1],3),np.uint8)
#色調整
bk1[:,:,0]=bk1[:,:,0]+0 #青
bk1[:,:,1]=bk1[:,:,1]+0 #緑
bk1[:,:,2]=bk1[:,:,2]+0 #赤
array=np.insert(img, 0, bk1, axis=0)
array=np.insert(array, array.shape[0], bk1, axis=0)
#枠追加処理(左右)
bk2=np.zeros((array.shape[0],num_insert,3),np.uint8)
#色調整
bk2[:,:,0]=bk2[:,:,0]+0 #青
bk2[:,:,1]=bk2[:,:,1]+0 #緑
bk2[:,:,2]=bk2[:,:,2]+0 #赤
array=np.insert(array, [0], bk2, axis=1)
array=np.insert(array, [array.shape[1]], bk2, axis=1)
#画像出力
cv2.imwrite(pic_name_out,np.array(array))

 

なにやら難しそうに見えますが、やっていることは意外とシンプル。

⓪画像を読み込み配列化

①読み込んだ配列の外周部分に新たな配列を追加

②①で加工した配列を再び画像化

ということをやっているだけです。

 

一つ一つの項目でコメントを追加していますので、読み進めてみてください。

なんとなくやっていることを理解できるはずです。

スポンサーリンク

 

 

※①の配列追加の際にはnp.insertというスキルを使っています。

このスキルの詳細を知りたい方は以下のリンクをご参考ください。

【python-numpy】既存の配列に別の配列を挿入!np.insertの使い方!

 

サンプルコードの実行結果

 

コードが書けたところで、先ほどの実際に処理を実行してみましょう。

まずは以下の画像のように、先ほど書いたコード(add_frame.py)が保存してある場所と同じフォルダに、今回使用するmikan.jpgという名前の画像を保存しておきます。

f:id:yshgs_elec:20210204155144j:plain

この状態で、先ほどのサンプルコードを実行します。

すると以下の画像のようにもとの画像に黒い外枠が追加されたmikan_out.jpgという画像が出力されました。

f:id:yshgs_elec:20210204155159j:plain

というわけで、問題なく処理ができることを確認できました。

スポンサーリンク

 

コードの応用事例

これだけで終わっては面白くありませんので、先ほどのサンプルコートを修正して、画像がどのように変化するのか見ていきましょう。

 

◆事例①外枠の太さ変更

まずはコード中にあった

num_insert=50を

num_insert=200に変更してみます。

すると以下のように外枠が太くなりました。

f:id:yshgs_elec:20210204155215j:plain

 

◆事例②外枠の色

次はコード中にあった以下の部分を

◆bk1[:,:,0]=bk1[:,:,0]+0 #青
⇒bk1[:,:,0]=bk1[:,:,0]+255 #青

◆bk2[:,:,0]=bk2[:,:,0]+0 #青

⇒bk2[:,:,0]=bk2[:,:,0]+255 #青

に変更してみましょう。

※外枠は200のままにしています。

すると以下のように外枠の色が青に変化しました。

f:id:yshgs_elec:20210204155229j:plain

色は青、緑、赤の三つの要素を組み合わせることで表現されていますので、コード中の色調整部分をうまく調整することでどんな色でも表現できます。

f:id:yshgs_elec:20210204155242j:plain

こんなこともできますので、ぜひいろいろ遊んでみましょう。

 

スポンサーリンク

 

おわりに

というわけで今回はpython-openCVを使って、画像の外周部分に指定した太さ、指定した色で枠を追加するサンプルコードをご紹介しました。

画像加工をする際などにぜひご活用ください。

 

このように私のブログでは様々なプログラミングスキルを紹介しています。

・もっと革新的なことをやりたい。

・プログラミングについてもっと詳しくなりたい。

こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。

 

この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

 ↓ 応援ボタン

にほんブログ村 IT技術ブログへ
にほんブログ村

 

それではまた!