したがって、ndarrayとして形状(224,244,3)の画像があります。このような画像の境界ボックス注釈があります
{
annotations: [
{
class: "rect",
height: 172,
width: 341,
x: 282,
y: 165
},
{
class: "rect",
height: 172,
width: 353,
x: 592,
y: 90
}
],
class: "image",
filename: "img_05974.jpg"
}
上記の外接する四角形のような画像が得られるように、numpy配列をトリミングするにはどうすればよいですか?
原則として、配列から適切な部分をスライスするだけで、トリミングを簡単に行うことができます。例えば。 image[100:200, 50:100, :]
は、ピクセル100と200の間の部分をy(垂直)方向にスライスし、ピクセル50と100の間の部分をx(水平)方向にスライスします。
この実用的な例を参照してください:
import matplotlib.pyplot as plt
mydic = {
"annotations": [
{
"class": "rect",
"height": 98,
"width": 113,
"x": 177,
"y": 12
},
{
"class": "rect",
"height": 80,
"width": 87,
"x": 373,
"y": 43
}
],
"class": "image",
"filename": "https://i.stack.imgur.com/9qe6z.png"
}
def crop(dic, i):
image = plt.imread(dic["filename"])
x0 = dic["annotations"][i]["x"]
y0 = dic["annotations"][i]["y"]
width = dic["annotations"][i]["width"]
height = dic["annotations"][i]["height"]
return image[y0:y0+height , x0:x0+width, :]
fig = plt.figure()
ax = fig.add_subplot(121)
ax.imshow(plt.imread(mydic["filename"]))
ax1 = fig.add_subplot(222)
ax1.imshow(crop(mydic, 0))
ax2 = fig.add_subplot(224)
ax2.imshow(crop(mydic, 1))
plt.show()