检测图像中的白色矩形区域以提升EasyOCR识别效果
箱体白色标签区域裁剪+EasyOCR优化识别思路
针对远距离拍摄标签识别精度低的问题,核心思路是先精准定位并裁剪出白色标签区域,预处理后再输入EasyOCR,以下是具体实现方向:
颜色阈值法定位标签
利用白色标签与深色箱体的颜色差异,通过颜色空间转换提取标签掩码:- 将图像转为HSV格式(比RGB更适合颜色阈值筛选),设置白色的阈值范围(可根据实际拍摄场景微调参数),生成掩码分离白色区域。
- 对掩码做膨胀+腐蚀的形态学操作,去除噪点干扰。
- 提取掩码中的轮廓,通过面积、长宽比筛选出符合标签特征的轮廓,获取外接矩形后完成区域裁剪。
示例代码:
import cv2 import numpy as np img = cv2.imread("box_image.jpg") hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 白色HSV阈值范围,可根据实际光照调整 lower_white = np.array([0, 0, 200]) upper_white = np.array([180, 25, 255]) mask = cv2.inRange(hsv_img, lower_white, upper_white) # 形态学去噪 kernel = np.ones((3,3), np.uint8) mask_clean = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) # 找轮廓并裁剪 contours, _ = cv2.findContours(mask_clean, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: area = cv2.contourArea(cnt) if area > 1000: # 过滤小噪点轮廓 x, y, w, h = cv2.boundingRect(cnt) label_region = img[y:y+h, x:x+w]边缘检测+矩形轮廓筛选
适用于标签边缘清晰的场景:- 先对图像灰度化、高斯模糊,再用Canny边缘检测提取轮廓。
- 对轮廓做多边形近似,筛选出4条边的矩形轮廓,结合长宽比、面积进一步过滤非标签区域。
- 根据矩形轮廓的外接框裁剪标签,该方法不受颜色单一干扰,适合箱体表面有其他白色小区域的场景。
裁剪后预处理增强识别率
裁剪后的标签区域还需做预处理,进一步提升EasyOCR的识别效果:- 将标签转为灰度图,用自适应二值化处理(应对光照不均导致的局部明暗差异)。
- 通过插值放大标签(比如放大2倍),让字符更清晰。
- 可选:用直方图均衡化增强对比度,弱化阴影影响。
示例预处理代码:
label_gray = cv2.cvtColor(label_region, cv2.COLOR_BGR2GRAY) # 自适应二值化 thresh_label = cv2.adaptiveThreshold(label_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) # 放大标签 enlarged_label = cv2.resize(thresh_label, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)备选方案:模板匹配(标签规格固定时)
如果所有箱体的标签尺寸、形状完全统一,可以提前拍摄一张清晰的标签作为模板,用OpenCV的模板匹配功能快速定位标签位置,直接裁剪对应区域,适合批量标准化场景。
内容的提问来源于stack exchange,提问作者batuhan diler
相关产品推荐
相关产品推荐

