0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Opencv2-python: fillPoly() jsonのファイルからマスクを作成する方法

Posted at

概念

cv2.fillPoly(img,polygon_coord,fill_val)

引数
img: (画像)np.array
polygon_coord: ポリゴンの座標 x,y のnp.array [[x1,y1],[x2,y2].....] intの値
fii_val: 塗りつぶす値 (値と色のarray)

画像内でポリゴンの範囲を塗りつぶします。物体検出やポリゴンのデータからマスクを作成することでよく利用している関数です。
polygon_coordsは (1,p,2)のサイズのnp.arrayです。pはポリゴンのポイントです。画像内で塗りつぶすので、polygon_coords形式はintが必要です。

jsonからマスク作成

画像セグメンテーションのタスクでは、もとデータはよくjson形式です。モデル内で読み込むために、画像のarrayに変換しなければなりません。このjsonのデータは、xyのarrayに変化して、cv2.fillpollyを利用したら、画像に変換できます。
今回、cv2.resize()の記事と同じの「かぼすちゃん」の写真を使います。Makesense.aiというラベル作成のサイトでカボスちゃんの体、目、鼻のラベルを作ります。(jsonのファイルをダウンロードのリンク)、利用しているファイルはGitrepoで保存しています(リンク)。ぜひ使ってください

import matplotlib.pyplot as plt
import cv2,json
import numpy as np

#ファイルを読み込む
img=cv2.imread("doge.jpg")[:,:,::-1]
json_data = json.load(open("doge_json.json"))

#マスク作成
label_dic={"Body":1,"Eye":2,"Nose":3} #ラベルの辞書
img_mask=np.zeros_like(img[:,:,0])
for id_l, items in json_data["doge.jpg"]["regions"].items():
    #XとYを検出
    print(id_l,len(items["shape_attributes"]))
    x_vals=items["shape_attributes"]["all_points_x"]
    y_vals=items["shape_attributes"]["all_points_y"]
    #(1,p,2)のarrayに変換
    coors_xy= np.array([x_vals,y_vals]) 
    pixel_loc_xy = np.floor(coors_xy).T 
    #マスクのファイルに塗りつぶす
    val=label_dic[items["region_attributes"]["label"]]
    img_mask = cv2.fillPoly(img_mask, np.int32([pixel_loc_xy]), val) 

#表示
fig,axs=plt.subplots(1,2,figsize=(12,8))
axs[0].imshow(img)
axs[1].imshow(img_mask)
#保存
cv2.imwrite("doge_mask.png",img_mask)

image.png

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?