You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将OpenCV轮廓提取后被框标注的图像单独保存?

实现方案

你当前的代码已经完成了轮廓筛选、最小外接矩形提取的核心逻辑,只需要新增裁剪、保存区域的代码即可,以下是两种常用的实现方式:

方案1:轴对齐矩形裁剪(简单实现,无需处理倾斜)

如果不需要修正轮廓的倾斜角度,直接裁剪外接矩形的轴对齐区域即可,修改后的完整代码如下:

import cv2
import numpy as np

# 这里保留你原来的变量定义:dilation2是二值膨胀后的图,img是原始输入图
region = []
contours, hierarchy = cv2.findContours(dilation2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):
    cnt = contours[i]
    # 计算轮廓面积,筛除小面积区域
    area = cv2.contourArea(cnt)
    if area < 80:
        continue

    # 查找最小外接矩形
    rect = cv2.minAreaRect(cnt)
    # box存储矩形四个顶点坐标
    box = cv2.boxPoints(rect)
    box = np.int0(box)

    # 计算高度和宽度
    height = abs(box[0][1] - box[2][1])
    width = abs(box[0][0] - box[2][0])

    # 根据文本特征筛除过瘦的矩形,保留扁平矩形
    if height > width * 3:
        continue

    region.append(box)

# 这里新增裁剪保存逻辑,如果你不需要在绘制了轮廓的图上裁剪,就用img的原始副本
for idx, box in enumerate(region):
    # 先获取矩形的x、y轴极值,得到轴对齐的裁剪范围
    x_min = np.min(box[:, 0])
    x_max = np.max(box[:, 0])
    y_min = np.min(box[:, 1])
    y_max = np.max(box[:, 1])
    # 裁剪区域
    crop_img = img[y_min:y_max, x_min:x_max]
    # 保存文件,按序号命名
    cv2.imwrite(f"contour_{idx}.png", crop_img)
    # 绘制轮廓
    cv2.drawContours(img, [box], 0, (0, 255, 0), 1)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

方案2:倾斜矩形转正裁剪(适合文本类倾斜区域,输出更规整)

如果你的轮廓是倾斜的文本,需要转正后再保存,可以通过仿射变换实现,只需要修改上面的裁剪保存部分的代码:

for idx, box in enumerate(region):
    rect = cv2.minAreaRect(box)
    # 获取矩形的中心点、宽高、旋转角度
    center, size, angle = rect
    # 生成旋转矩阵
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    # 对整图做旋转
    rotated = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))
    # 裁剪旋转后的矩形区域
    crop_img = cv2.getRectSubPix(rotated, (int(size[0]), int(size[1])), center)
    # 保存文件
    cv2.imwrite(f"contour_{idx}.png", crop_img)
    # 绘制轮廓
    cv2.drawContours(img, [box], 0, (0, 255, 0), 1)

注意事项

  • 如果你希望保存的是没有绿色轮廓线的原始区域,把裁剪逻辑放到cv2.drawContours之前执行即可
  • 保存路径如果不是当前工作目录,需要把imwrite的第一个参数改成完整路径,比如f"C:/save_path/contour_{idx}.png"
  • 代码里的img是你的原始输入图像,不要用二值化、膨胀后的处理图做裁剪

内容的提问来源于stack exchange,提问作者Charlie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:15:04