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

如何校正倾斜矩形图像以实现电路板标签文字的准确识别?

电路板标签图像校正与OCR优化方案

一、基于黑边框的矩形校正方法(可行且易实现)

你给标签添加黑边框的思路很实用,可以通过以下步骤完成校正:

  • 提取边框轮廓:用OpenCV的cv2.findContours定位分割后图像中黑边框的最大轮廓(默认标签边框是图像中最突出的矩形)。
  • 计算旋转角度:通过cv2.minAreaRect获取轮廓的最小外接矩形,返回值包含旋转角度。注意OpenCV的角度范围是-90到0,需要转换:若角度小于-45度,旋转角度设为90 + angle;否则直接用-angle。
  • 执行图像旋转:用cv2.getRotationMatrix2D生成旋转矩阵,再通过cv2.warpAffine完成旋转,选择合适的边界填充方式避免内容裁剪。

示例代码片段:

import cv2
import numpy as np

# 读取带黑边框的分割图像
img = cv2.imread('label_segmented.jpg', cv2.IMREAD_GRAYSCALE)
# 二值化处理,让黑边框转为白色便于轮廓识别
_, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
# 提取外部轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 取面积最大的轮廓(对应标签边框)
cnt = max(contours, key=cv2.contourArea)
# 获取最小外接矩形参数
rect = cv2.minAreaRect(cnt)
angle = rect[2]

# 校正旋转角度
if angle < -45:
    angle = 90 + angle
# 生成旋转矩阵并执行旋转
h, w = img.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, -angle, 1.0)
rotated_img = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)

# 传入pytesseract识别
import pytesseract
text = pytesseract.image_to_string(rotated_img)

二、基准点(Fiducial)方案的适用场景

如果标签边框存在遮挡、模糊等问题,基准点方案精度更稳定:

  • 适用前提:电路板上的基准点(如固定位置的圆形/方形标记)在分割图像中清晰可见,且你已预先记录基准点在正置状态下的相对位置。
  • 操作步骤:检测分割图像中的基准点,计算当前基准点相对位置与标准位置的角度差,以此角度旋转图像完成校正。
  • 优势:不受标签边框完整性影响,若多个标签共享基准点,可实现批量统一校正。

三、提升OCR识别率的额外建议

  • 图像预处理:旋转后对图像做高斯去噪、直方图均衡化,增强绿色文字的对比度;也可单独提取绿色通道,过滤其他颜色干扰。
  • Tesseract参数优化:指定文字语言(如中文用lang='chi_sim'),设置--psm 6(假设文字为连续块),或用--oem 3启用默认OCR引擎模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:28:31