可以调整以下的代码,只进行某一方向的平移;也可修改divisor调整平移的比例因子。
import cv2
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
import os, sys
def transSave(picPath, divisor=0.05):
img = cv2.imread(picPath)
rows, cols = img.shape[:2]
# 计算偏移量
deltaX = rows * divisor
deltaY = cols * divisor
M1 = np.float32([[1, 0, deltaX], [0, 1, 0]])
M2 = np.float32([[1, 0, -deltaX], [0, 1, 0]])
M3 = np.float32([[1, 0, 0], [0, 1, deltaY]])
M4 = np.float32([[1, 0, 0], [0, 1, -deltaY]])
# 用仿射变换实现平移
img_s1 = cv2.warpAffine(img, M1, (cols, rows))
img_s2 = cv2.warpAffine(img, M2, (cols, rows))
img_s3 = cv2.warpAffine(img, M3, (cols, rows))
img_s4 = cv2.warpAffine(img, M4, (cols, rows))
# 保存图片
cv2.imwrite(picPath.replace('.jpg', '_1.jpg'), img_s1)
cv2.imwrite(picPath.replace('.jpg', '_2.jpg'), img_s2)
cv2.imwrite(picPath.replace('.jpg', '_3.jpg'), img_s3)
cv2.imwrite(picPath.replace('.jpg', '_4.jpg'), img_s4)
if __name__ == '__main__':
rootdir = sys.argv[1] # 指明被遍历的文件夹
for parent, dirnames, filenames in os.walk(rootdir):
for filename in filenames:
currentPath = os.path.join(parent, filename)
transSave(currentPath)
直接在cmd中运行即可,注意指定路径
可以进入目录,看到平移后的图片
这个方法用于撤销之前的平移操作,也可以用于撤销下面的旋转操作
import os
import os.path
import sys
rootdir = sys.argv[1] # 指明被遍历的文件夹
for parent, dirnames, filenames in os.walk(rootdir):
for filename in filenames:
currentPath = os.path.join(parent, filename)
# 注意判断条件,如果原文件名字有_则不适用,需要自己修改
if len(filename.split('_'))>1:
print('filename is :' + filename)
os.remove(currentPath)
注释当中有调整大小以及各种旋转的代码
from PIL import Image
import os
import os.path
import sys
rootdir = sys.argv[1] # 指明被遍历的文件夹
for parent, dirnames, filenames in os.walk(rootdir):
for filename in filenames:
currentPath = os.path.join(parent, filename)
im = Image.open(currentPath)
#out = im.rotate(45) #45°旋转
#out = im.resize((224, 224))
out = im.transpose(Image.FLIP_LEFT_RIGHT)
#out = im.transpose(Image.FLIP_TOP_BOTTOM) #垂直翻转
#out = im.transpose(Image.ROTATE_90) # 90
#out = im.transpose(Image.ROTATE_180) #180°顺时针翻转
#out = im.transpose(Image.ROTATE_270) #270°顺时针翻转
newname=currentPath.replace('.jpg', '_transpose.jpg')
out.save(newname)