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

如何用OpenCV循环提取鼠标选中的ROI并用于Tesseract OCR

循环提取ROI并用于Tesseract OCR识别

核心思路

你的ROI数据中,每个条目包含两个坐标点(x1,y1)、(x2,y2),对应OpenCV图像裁剪格式为img[y1:y2, x1:x2]。只需遍历ROI列表,逐个提取区域,再根据类型(文本/复选框)用Tesseract或自定义逻辑处理即可。

完整代码示例

import cv2
import pytesseract

# 若Tesseract未加入系统环境变量,需指定路径
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# 加载目标图像并转灰度(提升OCR识别率)
img = cv2.imread('your_image_file.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 你的ROI数据
roi = [[(276, 756), (940, 828), 'text', 'name'],
       [(1572, 764), (2332, 824), 'text', 'cnic'],
       [(1996, 692), (2052, 752), 'box', 'corporate'],
       [(2300, 692), (2356, 756), 'box', 'individual']]

# 存储结果的字典
results = {}

# 循环处理每个ROI
for roi_item in roi:
    # 解包ROI的坐标、类型、名称
    (x1, y1), (x2, y2), roi_type, roi_name = roi_item
    # 提取ROI区域
    current_roi = gray_img[y1:y2, x1:x2]
    
    if roi_type == 'text':
        # 用Tesseract识别文本,可根据需求指定语言(比如lang='eng+urd')
        recognized_text = pytesseract.image_to_string(current_roi, lang='eng').strip()
        results[roi_name] = recognized_text
        print(f"{roi_name}: {recognized_text}")
    elif roi_type == 'box':
        # 处理复选框:通过灰度均值判断是否勾选(阈值可根据实际图像调整)
        avg_brightness = cv2.mean(current_roi)[0]
        is_checked = avg_brightness < 150  # 灰度值越低,区域越暗,大概率是勾选状态
        results[roi_name] = is_checked
        print(f"{roi_name} 勾选状态: {is_checked}")

关键说明

  • 坐标对应:OpenCV图像的索引顺序是[y_start:y_end, x_start:x_end],和你给出的name区域裁剪格式完全匹配,直接解包坐标即可使用。
  • 灰度转换:Tesseract对单通道灰度图的识别效果优于彩色图,所以先转灰度是常规操作。
  • 复选框判断:示例用像素均值做简单判断,若你的复选框样式复杂,可改用轮廓检测等方法优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:01:08