将边界框另存为图像 [英] Save bounding box as image
问题描述
我有一些python代码,可以接收A4字母的图像,然后在每个字符周围绘制边框.
I have some python code that takes in an image of an A4 letter, then draws bounding boxes around each character.
我想知道如何将每个边界框保存为图像,因此从本质上讲,它将占用它检测到的每个字符并将其保存. 最好将.png调整为20x20
I want to know how to save each bounding box as an image, so essentially it's taking every character it detects and saving it. Preferable as a .png resized to 20x20
(在此处,但是答案很模糊,不知道如何在我的代码中实现它)
(A similar question was asked here but the answer is quite vague and don't know how to implement it in my code)
这是我的代码:
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()
如果我不够清楚,请发表评论,我会尽力而为,
If I'm not clear enough, please comment and I'll try elaborate my best,
谢谢
推荐答案
您参考的问题使用 findContours ,它是图像处理的通用库. 如果已经有了边界框(以x,y和宽度,高度表示),则可以简单地使用matplotlib或opencv导出:
The question you reference uses findContours from OpenCV, a common library for image manipulation. If you already have the bounding box (in x, y and width, height) then you can simply export using matplotlib or, alternatively opencv:
image_patch = img[minr:maxr, minc:maxc] # get region of interest (slice)
# .. maybe do some scaling
plt.imsave("filename.png", image_patch)
或者在将它渲染到图形之后使用fig.savefig(path). 或使用opencv:
Alternatively with fig.savefig(path) after rendering it to a figure. Or with opencv:
import cv2
cv2.imsave("path.png", img_patch)
您可能希望在文件名中添加后缀(和/或检查文件是否已存在?),以避免覆盖.
You may want to add suffixes to your file names (and/o checking if the file already exists?) to avoid overwriting.
这篇关于将边界框另存为图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!