You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用OpenCV裁剪图像中文本下方的空白区域?

解决图片底部空白裁剪问题

嘿,你已经走完了最关键的前期流程啦!我来帮你补全剩下的步骤,轻松实现底部空白区域的裁剪~

完整代码实现

import cv2

# 你已经完成的初始化步骤
img = cv2.imread("pg13_gau.jpg.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edged = cv2.Canny(gray, 30, 300)
# 注:不同OpenCV版本的findContours返回值有差异,这里做了兼容处理
cnts, _ = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 1. 按轮廓面积从大到小排序,取最大的轮廓(对应文本所在的有效区域)
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)
target_contour = cnts[0]

# 2. 获取这个轮廓的最小外接矩形(x,y是左上角坐标,w是宽度,h是高度)
x, y, w, h = cv2.boundingRect(target_contour)

# 3. 裁剪图片:用NumPy切片直接截取目标区域
cropped_img = img[y:y+h, x:x+w]

# 4. 保存或预览结果
cv2.imwrite("cropped_pg13.jpg", cropped_img)
cv2.imshow("裁剪后图片", cropped_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

关键步骤说明

  • 筛选最大轮廓:文本区域是图片里面积最大的有效内容区域,按面积倒序排序后取第一个轮廓,就能精准定位到我们要保留的范围。
  • 获取边界矩形cv2.boundingRect()会返回包裹轮廓的最小矩形参数,这就是我们需要裁剪的区域范围。
  • 切片裁剪:利用NumPy的数组切片语法,直接从原始图片中截取目标矩形,简单高效。

如果遇到边缘检测误识别小噪点的情况,可以在边缘检测后加一步形态学操作优化:

# 可选:用闭运算消除细小噪点,让轮廓更清晰
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
edged = cv2.morphologyEx(edged, cv2.MORPH_CLOSE, kernel)

这样就能完美裁剪掉底部的空白区域啦!

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

火山引擎 最新活动