Python3
1import cv2
2import numpy as np
3
4# 白黒で読み込んでボカす
5img = cv2.imread('img.png',0)
6img_mod = cv2.GaussianBlur(img,(11,11),0)
7
8# 極端な値で二値化する
9# ※ただし、白部分を検索するため、背景を黒にするように注意
10ret,thresh = cv2.threshold(img_mod,240,255,cv2.THRESH_BINARY_INV)
11cv2.imshow("thresh",thresh)
12
13# 領域に分ける
14contours,hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1)
15
16# 最大値を探す
17area = []
18for contour in contours:
19 area.append(cv2.contourArea(contour))
20idx = area.index(max(area))
21
22# マスクを作る
23img_mask = np.zeros_like(img)
24img_mask = cv2.fillPoly(img_mask, [contours[idx]],(255))
25cv2.imshow("img_mask",img_mask)
26
27# マスクに従ってノイズを消す
28img_mod[img_mask==0] = 0
29cv2.imshow("img_mod",img_mod)
30
31
32# とりあえず線を引く
33# img_mod = cv2.drawContours(img, contours, -1, (128), 3)
34
35# 最大値に線を引く
36# img_mod = cv2.polylines(img, [contours[idx]],True,(128), thickness=3)
37# cv2.imshow("img_mod",img_mod)
38# cv2.waitKey(0)
39
40cv2.imwrite("img_mod.png",img_mod)
41cv2.imwrite("img_mask.png",img_mask)
マスク画像
ノイズ塗りつぶし
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/12/28 00:44 編集
2019/12/28 02:14
退会済みユーザー
2019/12/28 07:03
2019/12/28 07:41 編集