【python+opencv】抽出した輪郭を塗りつぶす

Source Code Software Computerpython

機械学習のアノテーション等のため、輪郭抽出した対象物の色を任意の色で塗分けたい。

基本コード

以下のように輪郭抽出したものを任意の色で塗りつぶしたい。

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()

コメント

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