最大最小外接矩形

1.最小外接矩形

1. 读取图像并转换为灰度图

im = cv2.imread("yy.png") im1 = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

  • im 读取的是彩色图像。
  • im1 是将 im 转换为灰度图的结果。灰度图简化了图像信息,适合进行轮廓检测等操作。

2. 查找轮廓

contours, _ = cv2.findContours(im1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

  • contours 保存了图像中所有找到的轮廓,每个轮廓是一个点集。
  • cv2.RETR_TREE 提供了完整的轮廓嵌套信息,cv2.CHAIN_APPROX_SIMPLE 优化了轮廓存储,仅保留必要的点。

3. 计算最小外接矩形

box = cv2.minAreaRect(contours[0])

  • contours[0] 代表第一个轮廓。
  • cv2.minAreaRect 计算轮廓的最小外接矩形。它返回一个 box,包含矩形的中心坐标、宽高和旋转角度。

4. 获取矩形的四个顶点并进行坐标处理

box = cv2.boxPoints(box) box = np.intp(np.round(box)) box = np.expand_dims(box, 0)

  • cv2.boxPoints 获取矩形的四个角点坐标。
  • np.round(box) 将坐标四舍五入,确保为整数。
  • np.intp 将坐标转换为整型数组,便于绘图。
  • np.expand_dims(box, 0) 为绘制轮廓添加维度,使 box 的形状符合 drawContours 的输入要求。

5. 绘制最小外接矩形

cv2.drawContours(im, box, -1, (0, 0, 255), 1, cv2.LINE_AA)

  • 在图像 im 上绘制 box 的轮廓。
  • -1 表示绘制整个轮廓。
  • (0, 0, 255) 指定轮廓颜色为红色。
  • 1 设置线条的粗细。
  • cv2.LINE_AA 为抗锯齿线,使矩形边缘更平滑。

2. 最大外接矩形

1. 读取图像并转换为灰度图

im = cv2.imread("yy.png") im1 = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

  • im 读取的是彩色图像。
  • im1 是将 im 转换为灰度图的结果。灰度图简化了图像信息,适合进行轮廓检测等操作。

2. 查找轮廓

contours, _ = cv2.findContours(im1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

  • contours 是一个包含所有轮廓的列表,每个轮廓表示为一组点的集合。
  • cv2.RETR_TREE 用于检索图像中所有的轮廓层次结构,cv2.CHAIN_APPROX_SIMPLE 会压缩轮廓点数据,只保留关键点,从而减少存储空间。

3. 计算水平外接矩形的坐标和尺寸

x, y, w, h = cv2.boundingRect(contours[0])

  • cv2.boundingRect 计算水平外接矩形,该矩形是能完全包围 contours[0] 的最小矩形。
  • 返回值:
    • x, y:矩形左上角的坐标。
    • w, h:矩形的宽度和高度。

4. 绘制矩形

cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2, cv2.LINE_AA)

  • cv2.rectangle 在图像 im 上绘制矩形。
    • (x, y):左上角坐标。
    • (x + w, y + h):右下角坐标(通过左上角坐标和宽高计算得到)。
    • (255, 0, 0):矩形颜色,这里为蓝色。
    • 2:矩形边框的厚度。
    • cv2.LINE_AA:抗锯齿效果,使边缘更平滑。

水平外接矩形是沿图像坐标轴的矩形框,简单而高效,适用于大多数情况。

适合对规则形状和固定方向的目标物体进行包围,但如果物体是倾斜或不规则形状,最小外接矩形可能更加精准。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

serenity宁静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值