前提・実現したいこと
2値化画像における,閉領域内の白と黒の比率を求めたいです.
該当のソースコード
Python
1 2import cv2 3import numpy as np 4# ---------------------------- 2値化 --------------------------- 5 6img = cv2.imread('C:.../input.png') # color scale 7gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # gray scale 8ret, binary = cv2.threshold(gray,0, 255, cv2.THRESH_OTSU) 9cv2.imwrite('C:.../binary.png', binary) 10 11# 輪郭抽出 12contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) 13 14 15 16# ---------------------------- 2値化後の面積を算出 --------------------------- 17out = np.zeros_like(gray) 18max_cnt = max(contours, key=lambda x: cv2.contourArea(x)) 19max_area = cv2.contourArea(max_cnt) 20white_area = cv2.countNonZero(binary) 21image_size = binary.size 22ratio = (1-white_area/max_area)*100 23print("白の面積:",white_area," 輪郭内の面積:",max_area,"求める割合:",ratio)
試したこと
cv2.contourAreaを用いると,領域内の面積が出せると思いますが,グリーンの定理によって厳密なピクセル数ではないという記載があったので,できれば面積の比ではなく,ピクセルの比で求めたいと考えています.
上のソースでは輪郭内の面積をcontourAreaで,白の面積をcountNonZeroから求めているため,ratioの値が負になってしまいました.
なお,領域外にも白色の面積はありますが,ごく微小のため,ソースコードでは領域外の白色面積は無いものとして書いています.
(補足説明/ツールのバージョンなど)
画像は次のようなものです.繰り返しになりますが,白長方形の面積(領域内の面積)と,その内部にある黒の面積の比率を求めたいです.
input.png

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。