以下のようにすればできます。
max_contour = max(contours, key=lambda x: cv2.contourArea(x))
で面積が最大の輪郭を抽出する
- 元画像と同じサイズの真っ黒な画像を作成する
- 真っ黒な画像に対して、
cv2.drawContours()
で輪郭内部を白く塗りつぶす
参考
面積が最大の輪郭を取得する方法
python
1import cv2
2import numpy as np
3
4# 画像を読み込む。
5img = cv2.imread("sample.png", cv2.IMREAD_GRAYSCALE)
6
7# 輪郭を抽出する。
8contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
9
10# 面積が最大の輪郭を取得する
11max_contour = max(contours, key=lambda x: cv2.contourArea(x))
12
13# 輪郭を描画する。
14dst = np.zeros_like(img)
15cv2.drawContours(
16 dst, [max_contour], -1, color=255, thickness=-1,
17)
18
19cv2.imwrite("dst.png", dst)