有点无聊3 2024-05-04 13:09 采纳率: 54.5%
浏览 3
已结题

如何用opencv对斜矩形区域进行裁剪和储存

如何用opencv对斜矩形区域进行裁剪和储存

        if Results:
            obbs = r.obb.xywhr.tolist()
            boxes=r.obb.xyxyxyxy.tolist()
            for i, obb in enumerate(obbs):
                xc, yc, w, h, angle = obb
                print(xc, yc, w, h, angle)
                for x, box in enumerate(boxes):
                    [x1,y1],[x2,y2],[x3,y3],[x4,y4]=box
                    print([x1,y1],[x2,y2],[x3,y3],[x4,y4])
                    pts=np.array([[x1,y1],[x2,y2],[x3,y3],[x4,y4]],dtype=np.float32)

  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-05-04 13:11
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    在你的问题中,你希望使用OpenCV来对斜矩形区域进行裁剪和存储。OpenCV 是一个强大的图像处理库,可以有效地解决这类问题。下面是具体的步骤和代码实现:

    解决方案概述

    1. 理解斜矩形(旋转矩形)的表示 :在你的代码片段中,斜矩形通过中心点 (xc, yc),宽度 w,高度 h 和旋转角度 angle 表示。这个旋转角度是相对于水平轴的逆时针旋转。
    2. 提取四个角点 :你已经有了四个角点的坐标,这些可以直接用于进一步处理。
    3. 进行仿射变换 :为了从原图中裁剪出斜矩形区域,需要构建一个变换矩阵,使得斜矩形区域变换为一个水平或垂直的矩形,以便裁剪。
    4. 裁剪并保存图像 :使用变换矩阵对图像进行变换后裁剪出对应的矩形区域,并保存。

      详细代码实现

      首先,我们需要做一些准备工作,包括导入必要的库和加载图像。
      python
      Copy code
      import cv2
      import numpy as np
      # 假定你已经有了以下变量
      # image: 需要处理的图像
      # boxes: 各个斜矩形的四个角点列表
      
      接下来,我们将遍历每个斜矩形,对每个斜矩形执行裁剪和保存操作。
      python
      Copy code
      for i, box in enumerate(boxes):
      # 将box中的点转换为np.array形式
      pts = np.array([box[0], box[1], box[2], box[3]], dtype=np.float32)
      # 计算边界框的矩形
      rect = cv2.minAreaRect(pts)
      box = cv2.boxPoints(rect)
      box = np.int0(box)
      # 计算仿射变换的两个三角形
      width = int(rect[1][0])
      height = int(rect[1][1])
      src_pts = box.astype("float32")
      dst_pts = np.array([[0, height-1],
      [0, 0],
      [width-1, 0]], dtype="float32")
      # 计算仿射变换矩阵
      M = cv2.getAffineTransform(src_pts[:3], dst_pts)
      # 进行仿射变换
      warped = cv2.warpAffine(image, M, (width, height))
      # 保存图像
      filename = f"cropped_{i}.png"
      cv2.imwrite(filename, warped)
      print(f"Image saved as {filename}")
      

      注意事项

    • 该代码假设 boxes 变量包含了每个斜矩形四个角点的坐标。
    • 变换矩阵 M 是通过计算得到,它将斜矩形映射到一个新的水平或垂直矩形。
    • 请确保在运行此代码前,image 变量已经包含了要处理的图像。
    • 保存文件名是按照斜矩形的索引命名的,确保不会覆盖已有文件。
      通过以上步骤,你可以有效地裁剪图像中的斜矩形区域并将其保存。如果有其他细节需要调整,比如裁剪区域的大小调整或旋转角度的优化,可以进一步调整代码以满足具体需求。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月4日
  • 已采纳回答 5月4日
  • 创建了问题 5月4日

悬赏问题

  • ¥15 使用VH6501干扰RTR位,CANoe上显示的错误帧不足32个就进入bus off快慢恢复,为什么?
  • ¥15 大智慧怎么编写一个选股程序
  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题