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

2024-04-21

这是我得到的收据图像,我使用 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)

所以,我正在寻找一种方法来制作适合裁剪图像的边界框。我不知道如何才能实现它。

Edit:

如果您想重复这个问题,这是另一张图片,receipt-2 https://ibb.co/9nTbrVD这些是图像的 b 框坐标[1638,1462,2974,1462,2974,1549,1638,1549].


如果你裁剪了25左边的像素和147顶部的像素然后你必须减去25全部像素X价值观和147像素来自Y价值观 因为图像上的所有元素向左移动 25 像素,向顶部移动 147 像素。

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

print(bbox_coords)

EDIT:使用代码

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)

BTW:在右侧和底部裁剪多少像素并不重要。


EDIT:重新缩放图像的计算

计算保持比例的尺寸

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您可以仅使用一种比例来计算和使用所有值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 从 AOSP 编译电子邮件应用程序

    我想向 AOSP 电子邮件应用程序添加一些不再受支持的功能 所以我克隆了存储库here https github com android platform packages apps email 这是一个 Eclipse 项目 并将其迁移到
  • C++:防止多个函数同时执行

    我问这个问题是因为mutex我发现文档处理单个函数 我认为我的情况很常见 我的问题是以下代码是否不仅会阻止func1 OR func2 并行执行多次 但它是否也会阻止func1 AND func2 同时执行 include
  • 在 UITableView 标头中包含的 UIImageView 上设置accessibilityLabel

    我有一个UITableView我内置的loadView 我在做的事情之一loadView是创建一个UIView充当表头并填充UIImageView进去 图像视图包含作为风格化标题的图像 因此我想为 VoiceOver 用户添加辅助功能标签
  • 不要让 IE 选择并复制使用 jQuery .hide() 隐藏的表行

    我在数据表顶部有一个 jQuery 即时搜索栏 所有符合搜索条件的记录都将可见 row show 其余的都是隐藏的 row hide Problem 搜索后 我使用鼠标从搜索结果中选择 复制行列表并将其粘贴到 Excel 中 隐藏 记录也会
  • 使用 CSS 分布内联元素

    有没有一种简单的方法可以使用 CSS 在父块容器中分发内联元素 将边距设置为自动不起作用 因为内联元素之间的边距设置为 0 而且我不想弄乱百分比 因为内容是动态的 特别是 我在段落 p 中有几个锚元素 a 跨越其容器的 80 我正在寻找一种
  • 如何获取TextView的行距?

    有没有办法获得行间距TextView in Android 我尝试寻找fontMetrics of the Paint of the TextView并这样做 tv1 getPaint getFontMetrics pfm float fo
  • 如何在Android中加载大图像并避免内存不足错误?

    我正在开发一个使用大图像的应用程序 1390 870 150kb 50kb 我在点击触发器 ImageView 时添加图像 在某个时刻我遇到内存不足错误 java lang OutOfMemoryError E AndroidRuntime
  • 何时应该处理 ManualResetEvent?

    我正在使用一个使用 ManualResetEvent 同步线程的应用程序 FxCop 让我处理掉这些物品 我发现以下讨论告诉我同样的事情 我需要 Dispose 或 Close EventWaitHandle 吗 https stackov
  • 在指令链接功能中动态添加 ng-click

    我正在尝试创建一个指令 允许将元素定义为可点击或不可点击 并且定义如下
  • 我无法使用 C# 代码连接到 SQL Server 数据库 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我试图创建注册表单 但是当我运行我的项目时收到此错误消息 抛出异常 System Data dll 中的 System
  • 启动时在 iOS 中启动位置感知后台服务

    应用程序可以注册重大位置变化 推荐 重大变化的定位服务提供了 低功耗方式接收位置数据 强烈推荐用于 不需要高精度位置数据的应用 有了这个 服务 仅当用户位置时才会生成位置更新 发生显着变化 因此 它非常适合社交应用或 为用户提供非关键的 位
  • 关于面向块的步骤与现实的 Spring Batch 文档?

    On the 文档 http docs spring io spring batch reference html configureStep htmlSpring Batch 的配置步骤清晰地描述了读取过程和写入是如何执行的 read p
  • GWT:在另一个模块内调用RPC服务

    我有一个模块B 它继承了模块A 当我从A内部调用RPC服务时 它们工作正常 但是当我在B中调用A的服务时 RPC调用总是失败 我错过了什么吗 预先感谢您的任何帮助 我在这里找到了我的问题的答案 http blog cloudglow com
  • 将谷歌地图标记颜色更改为我选择的颜色

    无论如何 是否可以从默认的红色标记颜色更改为我选择的十六进制颜色 我一直在寻找堆栈溢出 但似乎没有找到答案 这是我到目前为止所拥有的 var marker new google maps Marker position myLatLng l
  • 自动释放对象的保留/复制

    我想确保我在这里正确理解内存管理 是否有任何特殊原因要在这里使用一种 allocateCurrentDate 方法而不是另一种方法 另外 所有这些都不会导致内存泄漏 对吗 在 h 中我们有 NSDate currentDate1 NSDat
  • 如何在golang中嵌入其他包的结构

    我知道如何在同一包中的结构中嵌入其他结构 但是如何嵌入其他包的结构 dog go package dog import fmt type Dog struct Name string func this Dog callMyName fmt
  • 获取 Facebook 帖子以及每个帖子的点赞总数

    我正在尝试获取 Facebook 页面帖子 其中包含每个帖子的评论和点赞数 对于喜欢 我可以传递一个参数 即摘要 真实 and 总数 我试过这个 page id fields posts limit 1 summary 1 但什么也没有回来
  • 如何识别选项卡正在重新加载,我的意思是实际页面重新加载

    如何识别选项卡正在重新加载 我的意思是实际页面重新加载 我懂了chrome tabs onUpdated event 但对于此事件 即使在来自网页的 AJAX 调用的情况下 状态也是 正在加载 如何检测页面正在重新加载 你是对的 看起来不可
  • 调整标题元素底部边框的大小以适应文本宽度并具有响应能力

    我想让底部边框更窄并且响应灵敏 同时保持文本居中 我怎样才能做到这一点 我尝试显式使用 width 属性 但这显然不起作用 DEMO https www bootply com jEB0e4Ao61 https www bootply co
  • 裁剪图像后,如何找到新的边界框坐标?

    这是我得到的收据图像 我使用 matplotlib 绘制了它 x1 y1 x2 y2 x3 y3 x4 y4 bbox coords 650 850 1040 850 1040 930 650 930 image cv2 imread IM