2017-01-28 6 views
1

したがって、ndarrayとして形状の画像(224,244,3)があります。私はそれが私に上記の境界矩形のようなイメージを与えるように、私はnumpyの配列をトリミングするにはどうすればよいこのヌンディ配列である画像から境界ボックスを切り抜く

{ 
    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" 
} 

のように見える画像のためのバウンディングボックスの注釈がありますか?

+1

'幅:

は、本実施例を参照341'画像形状(' 224')よりも大きくなっています。したがって、あなたが達成しようとしていることはかなり不明です。また、クロッピングで 'x'と' y'の役割は何でしょうか? – ImportanceOfBeingErnest

答えて

4

原則として、正確な部分をスライスして簡単に切り抜くだけです。例えば。 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() 

enter image description here

関連する問題