首页 > 编程问答 >Python 和 OpenCV:如何裁剪半成形边界框

Python 和 OpenCV:如何裁剪半成形边界框

时间:2024-07-27 04:47:47浏览次数:6  
标签:python opencv computer-vision bounding-box

我有一个为无网格表创建网格线的脚本:

脚本之前:

enter image description here

脚本之后:

enter image description here

是否有一种简单的方法,使用 OpenCV 来裁剪“脚本之后”图像,使其仅包含四边边界框?示例输出:

enter image description here

编辑:

我目前正在研究一种解决方案,该解决方案可以找到垂直/水平方向的第一条/最后一条全黑像素线。它会起作用,但想知道是否有更优雅的东西。


当然,可以使用 OpenCV 裁剪“脚本后”图像以仅包含四边形边界框。以下是一种更优雅的方法:

1. 查找轮廓并排序

  • 查找轮廓: 在二进制图像(似乎已经拥有的图像)上使用 cv2.findContours
  • 排序轮廓: 按大小对轮廓进行排序,并选择最大的轮廓,因为它很可能对应于的边界框。

2. 查找边界矩形并裁剪

  • 边界矩形: 使用 cv2.boundingRect 查找最大轮廓的边界矩形。这将为提供裁剪区域的 x y 宽度 高度
  • 裁剪图像: 使用这些值从原始图像中裁剪出感兴趣的区域。

以下是 Python 代码:

import cv2

# 加载图像(替换为的图像路径)
image = cv2.imread('your_image.png')

# 将图像转换为灰度(如果它已经是,则跳过此步骤)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 查找轮廓
contours, _ = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 按面积对轮廓进行排序并获取最大的轮廓
contours = sorted(contours, key=cv2.contourArea, reverse=True)
largest_contour = contours[0]

# 查找边界矩形
x, y, w, h = cv2.boundingRect(largest_contour)

# 裁剪图像
cropped_image = image[y:y+h, x:x+w]

# 显示或保存裁剪的图像
cv2.imshow("Cropped Image", cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

此代码首先查找图像中的所有轮廓,按大小对它们进行排序,找到最大轮廓的边界框,最后裁剪并显示/保存裁剪的图像。

此方法应该比查找第一条和最后一条黑线更健壮且更通用,因为它不依赖于特定于行的特征,并且即使网格线不完美也能工作。

标签:python,opencv,computer-vision,bounding-box
From: 67150566

相关文章

  • 使用类型提示将 Python 转换为 Cython
    类型提示现在在Python3.5版本中可用。在规范(PEP484)中,目标(和非目标)被明确暴露:#RationaleandGoals此PEP旨在为类型注释提供标准语法,开放Python代码更容易静态分析和重构、潜在的运行时类型检查以及(也许在某些情况下)利用类型信息生成代码。......
  • 在 Python 类型提示中区分 PySpark 和 Pandas DataFrame (PyCharm)
    在PyCharm中,如果使用apyspark.sql.DataFrame代替pandas.DataFrame,类型提示似乎不会触发警告,反之亦然。例如以下代码根本不会生成任何警告:frompyspark.sqlimportDataFrameasSparkDataFramefrompandasimportDataFrameasPandasDataFramedef......
  • 如何在Python中继承类型提示?
    所以我的问题是,当我有一个A类型的类来做事情并且我使用这些函数作为subclass(B)时,它们仍然是类A的类型,并且不接受我的类B对象作为参数或作为函数签名。我的问题简化了:fromtypingimportTypeVar,Generic,CallableT=TypeVar('T'......
  • Python - 如何传递类对象的函数参数类型(打字)
    我想python3.7附带了(不确定),不仅可以将变量名传递给函数,还可以传递变量的类型。我想知道的是是否有可能传递特定类的类型。以同样的方式传递:deffoo_func(i:int)->None:pass如果我有一个类,让我们说:classfoo_class(object):pass我如何转换fo......
  • Opencv学习项目4——手部跟踪
    主要是使用opencv和mediapipe库来实现手部跟踪,首先我们先介绍一下mediapipe库mediapipe库介绍MediaPipe是一个由Google开发的开源框架,用于构建基于机器学习的应用程序,特别是涉及实时数据处理和传感的应用。它提供了一套工具和库,使开发者可以轻松地构建复杂的多媒体处理......
  • 使用 Python 构建简单 REST API
    使用Python构建简单RESTAPI1.概述本技术文档旨在指导开发者使用Python框架Flask构建一个基本的RESTAPI。通过学习本指南,您将掌握创建、读取、更新和删除(CRUD)操作的基本知识,并能够使用Python构建自己的API。2.安装依赖首先,您需要确保已安装Python和Flask......
  • Python——Pandas(第二讲)
    文章目录变量类型的转换Pandas支持的数据类型在不同数据类型间转换建立索引新建数据框时建立索引读入数据时建立索引指定某列为索引列将索引还原变量列引用和修改索引引用索引修改索引修改索引名修改索引值更新索引Series的索引和切片DataFrame的索引和切片选择列按......
  • 基于Python+Django的红色文化研学网站设计与实现
    ......
  • 【python】对网站进行请求-初识
    python实现对网站进行请求代码如下importrequestsdefget_data(url,headers=None,params=None,timeout=10):try:res=requests.get(url,headers=headers,params=params,timeout=timeout)res.raise_for_status()returnres.text......
  • 【python】Django初识-从未有如此美妙的开局
    Django初识python、Django安装与验证python安装Python官网https://www.python.org/Django安装pipinstallDjango验证python是否安装成功python--version验证Django是否安装成功python3-mdjango--version创建第一个Django项目项目创建与服务器启动打开cmd,输......