2016-05-01 26 views
0

私はA4文字の画像を取り込んで、それぞれの文字の周りにバウンディングボックスを描画するPythonコードをいくつか持っています。バウンディングボックスを画像として保存

各バウンディングボックスをイメージとして保存する方法を知りたいので、基本的にはそれを検出して保存するすべての文字を取ります。ここでは20×20

(同様の質問がhereを頼まれたが、答えは非常に曖昧で、私のコードでそれを実装する方法がわからない)

にリサイズ.PNGとして好ましい は私のコードです:私は十分に明確ではないよ場合

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.patches as mpatches 
from scipy.misc import imread,imresize 
from skimage.segmentation import clear_border 
from skimage.morphology import label 
from skimage.measure import regionprops 


image = imread('./adobe.png',1) 

#apply threshold in order to make the image binary 
bw = image < 120 

# remove artifacts connected to image border 
cleared = bw.copy() 
clear_border(cleared) 

# label image regions 
label_image = label(cleared,neighbors=8) 
borders = np.logical_xor(bw, cleared) 
label_image[borders] = -1 

print label_image.max() 

fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6)) 
ax.imshow(bw, cmap='jet') 



for region in regionprops(label_image, ['Area', 'BoundingBox']): 
    # skip small images 
    if region['Area'] > 50: 

     # draw rectangle around segmented coins 
     minr, minc, maxr, maxc = region['BoundingBox'] 
     rect = mpatches.Rectangle((minc, minr), maxc - minc, maxr - minr, 
           fill=False, edgecolor='red', linewidth=2) 
     ax.add_patch(rect) 

plt.show() 

、コメントと私は私の最高を詳しく説明してみてくださいよ、

はあなた

ありがとうください。

答えて

3

あなたが参照している質問は、画像操作用の共通ライブラリであるOpenCVのfindContoursを使用しています。 すでに(X、Y、幅、高さ)バウンディングボックスを持っているなら、あなたは、単に、代わりにOpenCVのをmatplotlibのを使用してエクスポートしたりすることができます

にそれをレンダリングした後fig.savefig(パス)との代わりに
image_patch = img[minr:maxr, minc:maxc] # get region of interest (slice) 
# .. maybe do some scaling 
plt.imsave("filename.png", image_patch) 

数字。 またはOpenCVのと:

import cv2 
cv2.imsave("path.png", img_patch) 

あなたはあなたのファイル名にサフィックスを追加することも上書きされないように(ファイルが既に存在するかどうかをチェックOおよび/?)。

+0

こんにちは、ありがとう、私はあなたの私のループで示唆されたコードの2つの最初の行を置いた、今は保存画像が保存する領域が間違っています。私は手紙をいくつか手に入れましたが、部分的で空白のスペースもたくさん保存されました。あなたのコードは正しいと思いますが、正確な境界線を[minc:maxc、minr:maxr]という形式に変換する方法はわかりません。 – Zack

+0

もちろん、その行、そして列。私は例でそれを修正した。適切なテスト画像を提供できる場合は、テストすることができます(コードスニペットが完成していれば)。 – user3736966

関連する問題