Python3 实现验证码图片自动切割与处理详解

凌晨两点半
凌晨两点半
发布时间:2026-10-13| 4人浏览过
原创

本文介绍使用Python3结合PIL库实现验证码图片的自动切割方法。通过定义行列数,将原始大图分割为多个小图,便于后续OCR识别或人工校验。文中提供了完整的splitimage函数代码,包含路径处理、尺寸计算及文件保存逻辑,适用于Python爬虫及图像识别场景。

切割前图片

切割后四个图片

以下是实现该功能的核心代码。程序首先导入必要的库,包括用于图像处理的PIL(Image, ImageDraw, ImageFile)、用于数值计算的numpy、用于OCR识别的pytesseract、用于计算机视觉处理的cv2、用于图像哈希计算的imagehash以及用于数据结构的collections。核心类pictureIdenti中定义了splitimage方法,该方法接收切割行数(rownum)、列数(colnum)、目标路径(dstpath)及源图片文件名(img_name)作为参数。默认情况下,rownum为1,colnum为4,dstpath指向D:\work\python36_crawl\Veriycode,img_name指向该目录下的mode_5246.png。代码首先打开指定图片,获取其宽度和高度。若行列数未超过图片尺寸,则打印原始图片信息(宽高、格式、模式),并开始处理切割。接着解析文件路径,确定基础文件名和扩展名。通过双重循环遍历每一行和每一列,计算每个小图的宽高(rowheight = h // rownum, colwidth = w // colnum)。在循环内部,利用img.crop方法根据坐标框(box)截取图像区域,生成新文件名(格式为basename_序号.ext),保存至目标路径,并将文件路径加入列表file_list以便后续打印。最后输出所有生成的图片路径及总数量。

#coding:utf8
import os
from PIL import Image,ImageDraw,ImageFile
import numpy
import pytesseract
import cv2
import imagehash
import collections
class pictureIdenti:

 #rownum:切割行数;colnum:切割列数;dstpath:图片文件路径;img_name:要切割的图片文件
 def splitimage(self, rownum=1, colnum=4, dstpath="D:\work\python36_crawl\Veriycode",
     img_name="D:\work\python36_crawl\Veriycode\mode_5246.png",):
  img = Image.open(img_name)
  w, h = img.size
  if rownum <= h and colnum <= w:
   print('Original image info: %sx%s, %s, %s' % (w, h, img.format, img.mode))
   print('开始处理图片切割, 请稍候...')

   s = os.path.split(img_name)
   if dstpath == '':
    dstpath = s[0]
   fn = s[1].split('.')
   basename = fn[0]
   ext = fn[-1]

   num = 1
   rowheight = h // rownum
   colwidth = w // colnum
   file_list = []
   for r in range(rownum):
    index = 0
    for c in range(colnum):
     # (left, upper, right, lower)
     # box = (c * colwidth, r * rowheight, (c + 1) * colwidth, (r + 1) * rowheight)
     if index<1:
      colwid = colwidth+6
     elif index<2:
      colwid = colwidth + 1
     elif index < 3:
      colwid = colwidth

     box = (c * colwid, r * rowheight, (c + 1) * colwid, (r + 1) * rowheight)
     newfile = os.path.join(dstpath, basename + '_' + str(num) + '.' + ext)
     file_list.append(newfile)
     img.crop(box).save(os.path.join(dstpath, basename + '_' + str(num) + '.' + ext), ext)
     num = num + 1
     index+=1
   for f in file_list:
    print(f)
   print('图片切割完毕,共生成 %s 张小图片。' % num)

以上这篇python3 实现验证码图片切割的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。