要求:一批随意命名的图片,将其按照阿拉伯数字递增重命名,命名如下图所示解决方法:# -*- coding:utf8 -*-import osimport reimport shutilfrom pathlib2 import Path# 批量命名图片def renamePic(srcImgDir): i=1 for item in srcImgD...
最近在网络上下载了一部漫画,漫画是
图片
形式的,下载下来后才发现每一张漫画
图片
的文件
名
都是没有规律且又长又复杂的,想要把它们改成按
数字
递增
规律的,一个一个去改文件
名
工作量太大,浪费太多时间,于是心想用
Python
写一个脚本实现
批量
重
命名
的操作。
文件存放在 D:/temp 路径下,文件
名
类似上图,
图片
很多,这里仅用少部分做演示
为了完成脚本,查阅了
Python
有关文件
名
的库,发现需要用到
Python
标准库中的os库。
一、重
命名
函数
Python
中有一个给文件重
命名
的函数:
os.rename(src,
1、使用
python
的 PIL 包,对
图片
进行压缩;
2、环境为
python
3.7.0、安装 PIL 包: pip install pillow;
3、
图片
尺寸等比例
修改
参数 scale【默认0.2】,
图片
压缩质量参数 quality【默认100】,
图片
公用
命名
参数 basename【默认'newimg-'】;
4、执行工具会在当前文件夹下新建一个newimg文件夹,存放压缩后的
图片
。
我们知道,
python
中的
数字
类型是不可变数据。也就是
数字
类型数据在 内存 中是不会发生改变,当变量值发生改变时,会新申请一块内存赋值为新值,然后将变量指向新的内存地址。
实验如下:
在做硕士课题的时候,因为课题
图片
种类比较多,而且各种
图片
的
名
称存在相同的,然后标注的时候生成的xml文件容易冲突,所以需要给
图片
重新
命名
一下,探索了几种
命名
方式,但是如果想让
图片
的
名
称都唯一,还是得加上数据种类的
名
称,因此我的
批量
命名
的方式是获取文件夹
名
称后接数据。
# 去除噪声
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)
# 查找轮廓
contours, hierarchy = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓
for contour in contours:
# 计算轮廓面积
area = cv2.contourArea(contour)
if area < 100:
continue
# 找到
数字
区域
x, y, w, h = cv2.boundingRect(contour)
digit = gray[y:y+h, x:x+w]
# 识别
数字
text = pytesseract.image_to_string(digit, config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789')
print(text)
这段代码使用了 OpenCV 和 pytesseract 库,首先将
图片
灰度化和二值化,然后去除噪声,接着查找轮廓,找到
数字
区域后使用 pytesseract 进行识别。
maidu_xbd:
HTML---bootstrap响应式的点赞界面