如何使用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
相关产品推荐
相关产品推荐

