如何用Python自动识别并裁剪图像中白色边框矩形内的区域?
基于OpenCV的白色边框ROI识别与裁剪方案
以下是实现自动识别白色边框ROI并裁剪保存的Python代码,依赖OpenCV库:
import cv2 import numpy as np # 读取图像 img = cv2.imread("ttLT2.jpg") # 转灰度图简化处理 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化分离白色边框:白色区域设为前景,其余为背景 _, binary = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY) # 形态学闭运算,填补边框缝隙、过滤小噪点 kernel = np.ones((5,5), np.uint8) binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel) # 查找图像轮廓 contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 筛选面积最大的轮廓(对应目标白色边框) max_contour = max(contours, key=cv2.contourArea) # 获取轮廓外接矩形坐标,裁剪ROI区域 x, y, w, h = cv2.boundingRect(max_contour) roi = img[y:y+h, x:x+w] # 保存裁剪后的图像 cv2.imwrite("cropped_roi.jpg", roi)
关键步骤说明
- 灰度转换:将彩色图转为灰度图,降低处理复杂度
- 二值化:阈值设为240是因为白色边框灰度值接近255,可精准分离目标区域
- 形态学操作:闭运算修复边框细小断裂,同时消除图像中的白色小噪点
- 轮廓筛选:取面积最大的轮廓,确保选中目标白色边框而非零星噪点
如果图像存在多个白色边框,可通过遍历轮廓+面积阈值筛选目标:
for cnt in contours: area = cv2.contourArea(cnt) if area > 10000: # 根据实际场景调整面积阈值 x, y, w, h = cv2.boundingRect(cnt) roi = img[y:y+h, x:x+w] cv2.imwrite(f"cropped_roi_{cnt}.jpg", roi)
内容的提问来源于stack exchange,提问作者A.Sa
相关产品推荐
相关产品推荐

