機械学習のアノテーション等のため、輪郭抽出した対象物の色を任意の色で塗分けたい。
基本コード
以下のように輪郭抽出したものを任意の色で塗りつぶしたい。
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('rinkaku.png',flags=cv2.IMREAD_GRAYSCALE)
contours, hierarchy = cv2.findContours(im,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
img = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)
img = cv2.drawContours(img, contours, -1, (0,255,0), 3)
plt.imshow(img)
plt.show()

対応コード
drawContoursの最後の引数で輪郭描画線の太さが指定できる。
-1に指定すると輪郭内の塗りつぶしができる。
img2 = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR)
color_list = [(255,0,0),(0,255,0),(0,0,255)]
for i in range(len(contours)):
cnt = contours[i]
img2 = cv2.drawContours(img2, [cnt], 0, color_list[i], -1)
plt.imshow(img2)
plt.show()

コメント