裁剪图像后,如何找到新的边界框坐标?

user_12

这是我收到的收据图像,我已经使用matplotlib绘制了它,

# x1, y1, x2, y2, x3, y3, x4, y4
bbox_coords = [[650, 850], [1040, 850], [1040, 930], [650, 930]]

image = cv2.imread(IMG_FILE)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

fig, ax = plt.subplots(figsize=(20, 20))
ax.imshow(gray, cmap='Greys_r'); 
rect = Polygon(bbox_coords, fill=False, linewidth=1, edgecolor='r')
ax.add_patch(rect)
plt.show()

print(gray.shape)
(4376, 2885)

收据图片

然后,我裁剪了原始的灰色图像,并使用相同的边界框坐标再次对其进行了绘制,这是结果,

# cropped the original image    
gray_new = gray[25:4314, 147:2880] 

fig, ax = plt.subplots(figsize=(20, 20))
ax.imshow(gray_new, cmap='Greys_r'); 
rect = Polygon(bbox_coords, fill=False, linewidth=1, edgecolor='r')
ax.add_patch(rect)
plt.show()

print(gray_new.shape)
(4289, 2733)

裁剪收据

因此,我正在寻找一种使边框适合裁切后的图像的方法我不知道该如何实现。

编辑:

如果您想复制问题,receipt-2这是另一张图片,这些是图片的b-box坐标[1638,1462,2974,1462,2974,1549,1638,1549]

简单

如果您裁剪25左侧像素和147顶部像素,那么你必须。减去25所有像素X值和147像素的Y值,因为在图像中的所有elemenets移动25像素的左侧和147个像素的顶部。

box_coords = [
    [650-25,  850-147],
    [1040-25, 850-147],
    [1040-25, 930-147],
    [650-25,  930-147]
]

print(bbox_coords)

编辑:使用代码

bbox_coords = [[650, 850], [1040, 850], [1040, 930], [650, 930]]

bbox_coords = [[x-25, y-147] for x,y in bbox_coords]

print(bbox_coords)

顺便说一句:在右侧和底部裁剪多少像素都没有关系。


编辑:重新缩放图像的计算

计算保持比例的大小

old_width = 4376
old_height = 2885
new_width = 550
#new_height = 270 # doesn't keep proportion
new_height = int(new_width/(old_width/old_height)) # keep proportion

print('new size:', new_width, new_height)
print('proportions:', (old_width/old_height), (new_width/new_height))

new_image = resize(original_img, shape=(new_width, new_height))

当图像更改大小时计算位置(我假设它不保持比例)。

scale_x = old_width/new_width
scale_y = old_height/new_height

print('scale:', scale_x, scale_y)

bbox_coords = [[int(x/scale_x), int(y/scale_y)] for x,y in bbox_coords]

print(bbox_coords)

如果图像保持不变,则scale_x == scale_y您可以计算所有值并仅使用一个比例尺。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从边界框值计算x,y坐标

使用坐标裁剪图像

使用PIL裁剪图像时如何设置坐标?

从是整块数组的图像中裁剪边界框

如何获取YOLO对象检测中边界框的坐标?

在Tensorflow Object Detection API中将图像裁剪到边界框

如何获得检测到的面部的边界框xy坐标

如何在扫描的文档中找到段落边界框坐标?

如何在Android中获取图像裁剪器的坐标?

根据对象边界框裁剪旋转的图像-Matlab

尝试确定图像中边界框的坐标并将其进一步裁剪

如何使用文件中的列表边界框位置裁剪多幅图像(python)?

如何在图像中找到形状的坐标

使用边界框列表从图像中裁剪多个边界框

如何使用CustomVision API返回边界框的绝对坐标?

语法错误-使用边界框坐标裁剪图像

如何基于Tensorflow.js中的边界框裁剪脸部?

获取坐标以从OpenCV输出图像生成边界框

如何对文本图像进行偏斜校正,同时也检索该图像的新边界框?

如何通过绘制边界框(或多边形)来裁剪图像中的多个对象?

如何在 Python 中找到旋转边界框的坐标?

裁剪后的 ROI 坐标

如何从findContours裁剪边界框内的图像

如何从边界框裁剪图像并为每个框创建新图像

如何使用 x/y/r 像素坐标裁剪图像?

如何在python opencv中简单裁剪边界框

如何使用边界框坐标裁剪图像中的感兴趣区域?

上传 Cloudinary 后如何裁剪图像?

从边界框裁剪 Tensorflow 图像