【Python-openCV】白黒画像に輝度の等高線を追加する方法!

こんにちは、ヒガシです。

 

このページではPython-openCVを使って、以下のような濃淡のあるモノクロ画像に、

こんな感じで輝度の等高線を追加する方法をご紹介していきます。

等高線を引く間隔も自由に設定できるようになっています。

 

あなたのやりたいことと一致していれば、ぜひ続きをご覧ください。

 

スポンサーリンク

必要なライブラリ一覧

今回もいつもおなじみの以下の2つのライブラリを使っていきます。

★OpenCV

★numpy

 

OpenCVのインストール方法については以下の記事で詳細解説していますので、使ったことがない人はまずはこちらからご覧ください。

【Python-OpenCV】インストール方法、バージョン確認、使用時の注意点

 

スポンサーリンク

輝度の等高線を追加するサンプルコード

それでは冒頭に紹介したような、濃淡のあるモノクロ画像に等高線を追加するサンプルコードをご紹介します。

 

※オリジナル画像の作成のところは、サンプル画像をつくっているだけなので、すでに使いたい画像がある場合はシンプルに画像を読み込んで変数imgに格納すればOKです。

#ライブラリインポート
import cv2
import numpy as np

#オリジナル画像の作成(画像があるなら必要ない)
img=np.zeros((512,512),np.uint8)
h,w=img.shape[:2]
x,y=int(w/2),int(h/2)
for i in range(10):
    cv2.circle(img, (x,y), int((10-i)*25), int(i*25), -1)
cv2.imwrite('original.jpg',img)

#輝度の等高線抽出
gray_step=10
gray_max=np.amax(img)
contour_list=[]
old_len_contour=0
for i in range(gray_step,gray_max,gray_step):
    thresh, img_thresh = cv2.threshold(img, i, 255, cv2.THRESH_BINARY)
    contours, hierarchy = cv2.findContours(img_thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    if len(contours[0]) != old_len_contour:
        old_len_contour=len(contours[0])
        contour=np.array(contours[0])
        contour_list.append(contour)

#等高線の描写
black_img=np.zeros((h,w),np.uint8)
for i in range(len(contour_list)):
    cv2.drawContours(black_img, contour_list, i, 255, 1)
    cv2.drawContours(img, contour_list, i, 255, 1)
cv2.imwrite('contour_only.jpg',black_img)
cv2.imwrite('contour_add.jpg',img)

 

コード中にあるgray_stepという変数でどのくらいの間隔で等高線を引くかを指定しています。

ここの数値を大きくすると粗い間隔、小さい数値にすると細かい間隔で等高線を引くことができます。

 

また、等高線が見ずらい場合もあると思いますので、等高線とベース画像の合成画像だけではなく、等高線だけの画像も出力するようにしていますのでご確認ください。

 

なお、今回のプログラムは実際の山のように外側から中心部にいくにつれて輝度が大きくなるような画像に対応するように作っています。

もし、谷のように中心部にいくにつれて輝度が小さくなる場合はプログラムを微修正する必要がありますのでご注意ください。

⇒もしやり方がわからなければコメント欄からご質問ください。

 

スポンサーリンク

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

それでは先ほど紹介したコードを等高線間隔を変えながら実行してみましょう。

 

まずは先ほど紹介したままで、gray_step=10で実行してみます。

こんな感じで細かい等高線が引かれていますね。

次はgray_step=60で実行してみましょう。

ちょっと間隔があきましたね。

 

こんな感じで結果が変わりますので、あなたのイメージあうようにgray_stepを変更しながら実行してみましょう。

 

スポンサーリンク

おわりに

というわけで今回はpython-openCVを使って、モノクロ画像に輝度の等高線を追加する方法をご紹介しました。

画像処理の際などにぜひご活用ください。

 

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

過去記事一覧

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村 IT技術ブログへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました