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

如何使用OpenCV Python提取已检测圆形区域内的文本?

提取OpenCV检测到的圆形区域内的文本

假设你已经通过cv2.HoughCircles或其他方法得到了圆形的圆心坐标和半径,以下是提取圆形内文本的完整流程:

1. 创建圆形掩码

先生成与原图像尺寸一致的全黑掩码,再在掩码上绘制白色填充圆形,标记出需要保留的区域:

import cv2
import numpy as np
import pytesseract

# 替换为你检测到的圆形参数
x_center, y_center, radius = 200, 200, 100
# 读取tif格式图像
img = cv2.imread('target_image.tif')

# 创建全黑掩码
mask = np.zeros(img.shape[:2], dtype=np.uint8)
# 绘制白色填充圆形(255为白色,-1表示填充)
cv2.circle(mask, (x_center, y_center), radius, 255, -1)

2. 提取圆形区域

通过位运算将掩码应用到原图像,只保留圆形内的像素:

masked_img = cv2.bitwise_and(img, img, mask=mask)

3. 图像预处理(优化OCR效果)

OCR对对比度高的二值图识别效果更好,需进行灰度转换、二值化和降噪处理:

# 转灰度图
gray = cv2.cvtColor(masked_img, cv2.COLOR_BGR2GRAY)
# 自适应二值化(适配光照不均场景)
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
# 去除微小噪点
kernel = np.ones((1, 1), np.uint8)
cleaned_img = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)

4. OCR提取文本

使用Tesseract提取预处理后图像的文本,可通过配置参数优化识别精度:

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

# 配置OCR参数:oem=3使用默认引擎,psm=6假设文本为单一均匀块
custom_config = r'--oem 3 --psm 6'
extracted_text = pytesseract.image_to_string(cleaned_img, config=custom_config)

# 输出结果(去除多余空白字符)
print("圆形内文本:", extracted_text.strip())

注意事项

  • 若检测到多个圆形,只需循环遍历每个圆形的参数重复上述流程即可;
  • 二值化方式可根据图像调整:如果文本是深色、背景浅色,可去掉THRESH_BINARY_INV参数;
  • 需提前安装Tesseract OCR引擎和Python的pytesseract库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:17:22