在进行滑块验证码图像还原的过程中,需要用到图片切割成小的图像块,然后根据给定的排序对小的图像块进行重新组合。

目录

一、将原图进行切割

二、切割之后的图片

三、还原之后的图片


未切割前的图片

一、将原图进行切割

根据分析,原图像大小尺寸为:宽:300px,高:200px

需要将原图切割为:宽:30px ,高:100px ,共20块

from PIL import Image
import numpy as np
import cv2
import os# 切割图片
def splitimage(src, rownum, colnum, dstpath, arr):img = Image.open(src)w, h = img.sizeif rownum <= h and colnum <= w:print('原图基本信息:宽:{}px,高:{}px,图片格式:{}'.format(w, h, img.format))print('图片切割开始处理, 请稍候...')s = os.path.split(src)if dstpath == '':dstpath = s[0]fn = s[1].split('.')basename = fn[0]ext = fn[-1]num = 0rowheight = h // rownumcolwidth = w // colnumfor r in range(rownum):for c in range(colnum):box = (c * colwidth, r * rowheight, (c + 1) * colwidth, (r + 1) * rowheight)img.crop(box).save(os.path.join(dstpath, rewrite_filename(arr.pop()) + '.' + ext), ext)num = num + 1print('图片切割完成,共生成 {}张小图片'.format(num))else:print('行列切割参数不合法')# 合并图片
def merge_picture(merge_path, num_of_cols, num_of_rows):filename = file_name(merge_path, ".png")shape = cv2.imread(filename[0], -1).shape  # 三通道的影像需把-1改成1cols = shape[1]rows = shape[0]channels = shape[2]dst = np.zeros((rows * num_of_rows, cols * num_of_cols, channels), np.uint8)for i in range(len(filename)):img = cv2.imread(filename[i])m, n = filename[i].split("\\")[-1].split(".")[0].split("_")cols_th = int(n)rows_th = int(m)roi = img[0:rows, 0:cols, :]dst[rows_th * rows:(rows_th + 1) * rows, cols_th * cols:(cols_th + 1) * cols, :] = roicv2.imwrite(merge_path + "merge.png", dst)# 遍历文件夹下的图片
def file_name(root_path, picturetype):filename = []for root, dirs, files in os.walk(root_path):for file in files:if os.path.splitext(file)[1] == picturetype:filename.append(os.path.join(root, file))return filename# 重写文件名称
def rewrite_filename(num):num = int(num)if (num < 10):return "0_{}".format(num)else:i = num % 10return "1_{}".format(i)if __name__ == '__main__':# 正确的文件块顺序arr = "18,13,9,5,3,10,2,7,19,14,6,1,12,17,11,0,8,15,4,16".split(",")arr.reverse()# 切割图片splitimage(r'E:\vdemo\img\code.png', 2, 10, r'E:\vdemo\img\file', arr)# 合并图片merge_picture(r'E:\vdemo\img\file', 10, 2)

二、切割之后的图片

切割之后的图片

三、还原之后的图片

还原之后的图片

python实现图片切割和合并相关推荐

  1. python图片切割与合并

    python图片切割与合并 1.tif图片切割为jpg 2.图片合并 1.tif图片切割为jpg 将图片切割为1024大小的小图片 大小不够1024的,填充为黑色 import os import n ...

  2. python实现图片切割

    栅格图片以矩阵的形式存储,对其实现切割实际上就是将整个矩阵分成一块一块的小矩阵,图片切割还是比较简单的,以下是python代码: def cutImage(Image:np.array,savePat ...

  3. 【Python+图片切割+图片合并】基于Python的图片批量切割与合并(保持原像素不变,不会出现像素大小不匹配、填充黑边的问题)

    基于Python的图片批量切割与合并(保持原像素不变,不会出现像素大小不匹配.填充黑边的问题) 前言 效果图 1.批量读取文件 2.清空目标目录方法(配合切割图片方法使用) 3.批量切割图片(像素不足 ...

  4. python进行图片的定位切割_python3 实现对图片进行局部切割的方法

    python3 实现对图片进行局部切割的方法 先拿个图片举例子,比如说截取途中方框内的图片: # 导入相关的库 from PIL import Image # 打开一张图 img = Image.op ...

  5. python读取图像并相加_python使用PIL和matplotlib获取图片像素点并合并解析

    python 版本 3.x 首先安装 PIL 由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又 ...

  6. python多图片合并pdf_Python结合ImageMagick实现多张图片合并为一个pdf文件的方法

    本文实例讲述了Python结合ImageMagick实现多张图片合并为一个pdf文件的方法.分享给大家供大家参考,具体如下: 前段时间买了不少书,现在手头的书籍积累的越来越多,北京这边租住的小屋子空间 ...

  7. python图片切割以及识别图片中的文字

    今天记录在爬取图片网站时,需要按如下需求展示图片和答案: 本次爬取数据量不大,爬取内容也都集中在一个页面,网站也没有异步加载或反爬措施,但是遇到了三个难点: 难点一:图片链接是lazyload,且全部 ...

  8. python智能图片识别系统(图片切割、图片识别、区别标识)

    目录 技术介绍 运行效果 关键代码 写在最后 技术介绍 你好! python flask图片识别系统使用到的技术有:图片背景切割.图片格式转换(pdf转png).图片模板匹配.图片区别标识. 运行效果 ...

  9. python多图片合并pdf_Python多图片合并PDF的方法

    python多图片合并pdf 起因 一个做美工的朋友需要将多个图片jpg .png 合并起来,ps操作太慢了所以用了python进行完成这个任务 代码 #!/usr/bin/env python # ...

最新文章

  1. 当前路径_[JSP] 07 JSP 路径问题
  2. Python使用SQLAlchemy连接数据库并创建数据表、插入数据、删除数据、更新表、查询表(CRUD)
  3. java 集合快速排序_搞定Java快速排序
  4. oracle数据库sql培训,Oracle数据库SQL语言实战培训教程(全面、详细、案例、精讲)套餐...
  5. Elastic-Job简介
  6. sudo apt install 遇到关于 lock 的错误消息
  7. 汇编语言之标志寄存器
  8. c语言按照姓名查询员工信息,输入10个职工信息,按号码大小排序,再使用查找函数找职工的姓…...
  9. mysql tb_Mysql数据库分库和分表方式
  10. vue 监听state 任意值变化、监听mutations actions
  11. 通过分区(Partition)提升MySQL性能
  12. 在linux命令行利用SecureCRT上传下载文件
  13. pygame安装教程
  14. Python爬虫:使用Appium在移动端抓取微博数据
  15. 初中生物教师资格证经验贴
  16. 计算机里的二进制什么意思,二进制是什么,为什么计算机要使用二进制?
  17. Docker镜像安装的一般步骤
  18. SpringCloud客户端Client启动时自动停止
  19. ZOHO企业邮箱教程(试用30/15天)
  20. VS2010在加载项目时,提示无法打开项目文件, 此安装不支持该项目类型的解决方法

热门文章

  1. 什么是web app
  2. nowcoder-第三届湖北省赛-Mr.Maxwell and attractions (贪心)
  3. MySQL备份报错mysqldump: Got error: 1045: Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  4. 40多年祖传中医的临床经验总结(收藏)
  5. zabbix使用SNMP监控思科无线控制器WLC
  6. gtest从一无所知到熟练使用(3)什么是test suite和test case
  7. 抖音四面被拒,再战头条终获offer,在线面试指南
  8. 《“己学”发略》发略
  9. 世界排名前五位的女程序员
  10. 程序猿的感悟:做人应该不知足