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

对含高亮文本的图像生成OCR识别边界框时OpenCV报错如何解决

问题原因分析
  • 通道不匹配:执行img = img[:,:,2]提取V通道后,图像从三通道变为单通道灰度图,而你调用cv2.rectangle时传入的是三通道BGR颜色值(255,0,0),单通道图像无法兼容三通道颜色绘制,直接触发参数不兼容报错。
  • 坐标规则不匹配:pytesseract的image_to_boxes返回的坐标以图像左下角为原点,OpenCV绘图API以图像左上角为原点,就算通道问题解决,直接用返回坐标绘制的框位置也会完全错位。
修复后的完整代码
import cv2
import pytesseract as pyt
pyt.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# 保留原始三通道图像用于绘制边界框
origin_img = cv2.imread('Image Pasted at 2021-10-21 13-31.png')
# 单独生成OCR用的处理图像
hsv_img = cv2.cvtColor(origin_img, cv2.COLOR_BGR2HSV)
v_channel = hsv_img[:,:,2]
hImg, wImg = v_channel.shape

boxes = pyt.image_to_boxes(v_channel)

for b in boxes.splitlines():
    b = b.split(' ')
    x, y, w, h = int(b[1]), int(b[2]), int(b[3]), int(b[4])
    # 转换坐标适配OpenCV左上角原点规则
    y = hImg - y
    h = hImg - h
    # 在三通道原图上绘制边界框
    cv2.rectangle(origin_img, (x, h), (w, y), (255,0,0), 1)
    # 可选:在框上方标注识别到的字符,方便验证结果
    cv2.putText(origin_img, b[0], (x, h-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,0,0), 1)

cv2.imshow('Result', origin_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
核心修改说明
  • 拆分了OCR处理图像和绘制用图像,保留原始三通道图像作为绘制载体,彻底解决通道不兼容问题
  • 调整坐标计算逻辑,适配OpenCV的坐标规则,保证边界框位置和识别字符完全对应
  • 补充了资源释放逻辑,避免窗口残留占用内存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:57:04