機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【python】【OpenCV】二値化した画像から面積を求める

OpenCVの標準関数であるcountNonZero()を用いて、二値化画像から白部分と黒部分の面積(割合)を求める

f:id:stjun:20200212225433p:plain

f:id:stjun:20200212225446p:plain

 

1. 誰に向けた記事か

pythonを勉強している人

OpenCVに興味がある人

・画像処理に興味がある人

※初心者向けにpythonの勉強法とその手順を記事にしました。

www.stjun.com

 

 

2. はじめに

以前、OpenCVに標準で搭載されている関数を使って画像の二値化を行いました。

www.stjun.com

 

今回、二値化画像から白色部分と黒色部分の面積をカウントして、写真全体に対して黒と白がどのくらいの割合で存在するか表示したいと思います。

上記を使えば、例えばSEM画像の処理とかにも使えると思います。

 

3. コードと実行結果と説明

3.1 コード
#画像の二値化_binary
import cv2

#画像の読み込み
img=cv2.imread('./test.jpg',0)
#特定の範囲のGaussian分布から閾値を自動で決めて二値化
ret1,img_th=cv2.threshold(img,0,255,cv2.THRESH_OTSU)
#全体の画素数
whole_area=img_th.size
#白部分の画素数
white_area=cv2.countNonZero(img_th)
#黒部分の画素数
black_area=whole_area-white_area

#それぞれの割合を表示
print('White_Area='+str(white_area/whole_area*100)+'%')
print('Black_Area='+str(black_area/whole_area*100)+'%')


#画像の表示
cv2.imshow("OpenCV",img)
cv2.imshow("OpenCV_th",img_th)
cv2.waitKey(0)
cv2.destroyAllWindows()

上記を実行すると冒頭の画像のように元画像、二値化画像、黒色と白色の面積割合が表示されます。

 

3.2 説明

まず次のthreshold()で画像を二値化します。引数の説明は冒頭の過去記事をご覧ください。

#閾値を自動で決めて二値化
ret1,img_th=cv2.threshold(img,0,255,cv2.THRESH_OTSU)

 次に画素数を調べます。

#全体の画素数
whole_area=img_th.size
#白部分の画素数
white_area=cv2.countNonZero(img_th)
#黒部分の画素数
black_area=whole_area-white_area

 まず .sizeで画像全体の画素数を取得します。

次にcountNonZero(img_th)で白部分の画素数を取得します。

countNonZero()は、画素が黒色(=0)以外の時にカウントアップする関数です。

今回、黒(=0)と白(=255)だけなので白色の画素数をカウントできます。

黒色の画素数は「全体の画素数ー白色の画素数」から算出します。

 

最後に、白色の面積割合は白色の画素数÷全体の画素数、黒色の面積割合は黒色の画素数÷全体の画素数で、それぞれの面積割合を算出します。

#それぞれの割合を表示
print('White_Area='+str(white_area/whole_area*100)+'%')
print('Black_Area='+str(black_area/whole_area*100)+'%')

※もし面積の絶対値を知りたい場合(例えば白の面積●●cm^2など)、スケールバーから写真全体の画素数と面積を結び付けてあげれば、黒色の面積と白色の面積の絶対値が得られそうですね。 

 

自分が使ってるお得情報の紹介

私はAmazon kindle unlimitedというサービスを1年以上利用しています。

これは月額980円で 和書12万冊以上の電子書籍を読めるサービスです。

ビジネス本、雑誌、漫画、技術本など様々な本を読むことができます。10冊まで端末にダウンロードできるのでネット環境がなくても(オフラインでも)見れます。

なおkindle unlimitedは最初の30日間無料のため、気軽に登録してみて、あまり読みたい本が無ければすぐに解約しても問題ありません。

それか30日内に気になる本を全て読破すれば実質タダです。

ぜひ気になった方はチェックしてみて下さい。

なおkindleにない本等を買う時はamazonギフト券(amazonで使えるポイント)を買い、ポイントで数冊まとめて買った方がお得です。

ギフト券(ポイント)は買ったら10年も有効で、ポイントが付きます。さらに本をまとめ買い(2冊以上同時に)買うと、ポイントがもらえます。

https://www.amazon.co.jp/b?ie=UTF8&node=5431437051

学生さんであればkindle unlimitedよりも年2450円(月210円程度)で映画見放題、音楽聞き放題、本読み放題の「prime student」がおすすめです。