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

如何从HTML页面裁剪验证码图片并结合Python OCR提取数字

验证码图片裁剪与数字提取完整方案

一、先完成验证码图片裁剪

你需要先将目标验证码图片保存到本地,再通过代码裁剪出有效验证码区域。以下是两种实用裁剪方法:

方法1:用OpenCV裁剪

通过像素坐标确定裁剪范围(需自行调整x1,y1,x2,y2,对应验证码在图片中的左上角、右下角坐标):

import cv2

# 读取原始验证码图片
original_img = cv2.imread("你的原始验证码图片路径.jpg")
# 裁剪区域:y1到y2行,x1到x2列(示例坐标需根据实际图片修改)
x1, y1, x2, y2 = 50, 20, 250, 80
cropped_img = original_img[y1:y2, x1:x2]
# 保存裁剪后的图片
cv2.imwrite("cropped_captcha.png", cropped_img)

方法2:用PIL裁剪

若习惯使用PIL库,可采用此方式:

from PIL import Image

# 打开原始验证码图片
img = Image.open("你的原始验证码图片路径.jpg")
# 裁剪区域格式:(左, 上, 右, 下)
cropped_img = img.crop((50, 20, 250, 80))
# 保存裁剪后的图片
cropped_img.save("cropped_captcha.png")

坐标获取技巧:用系统自带画图工具打开图片,鼠标移动到验证码角落,底部会显示对应像素坐标,以此调整裁剪参数。

二、整合裁剪与数字提取流程

将裁剪步骤嵌入你提供的提取代码,实现从原始图片到数字提取的一站式操作:

import cv2
import numpy as np
import pytesseract

# 原始图片路径
original_im_path = "E:/"
original_im_name = "原始验证码图片.jpg"
# 裁剪区域坐标(根据实际图片调整)
x1, y1, x2, y2 = 50, 20, 250, 80

# 读取原始图片并直接裁剪
img = cv2.imread(original_im_path + original_im_name)[y1:y2, x1:x2]

# 红色通道阈值处理
th=185
img[img[...,2]>th]=0

# 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化处理
binary = cv2.threshold(gray, 0, 255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]

# 放大图片(适配小尺寸验证码)
scale_ = 5
width = int(img.shape[1] * scale_ )
height = int(img.shape[0] * scale_ )
dim = (width, height)
resized = cv2.resize(binary, dim, interpolation = cv2.INTER_CUBIC)

# 形态学腐蚀去噪
resized = cv2.erode(resized, None)

# OCR提取数字
txt = pytesseract.image_to_string(resized, config='--psm 13 outputbase digits')

# 显示处理后的图片
cv2.namedWindow("output", cv2.WINDOW_NORMAL)
cv2.imshow("output", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()

print("提取的验证码数字:", txt)

三、注意事项

  • 务必根据实际验证码图片调整裁剪坐标,否则无法精准提取有效区域。
  • 确保已安装依赖库:pip install opencv-python numpy pytesseract,且Tesseract OCR引擎已配置到系统环境变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:07:42