import cv2
import os
import numpy as np
def flip(image,change_angle):
# Extracting height and width from
# image shape
height, width = image.shape[:2]
print("old image size (wxh)=", (width, height))
# get the center coordinates of the
# image to create the 2D rotation
# matrix
center = ((width-1)/2, (height-1)/2)
# using cv2.getRotationMatrix2D()
# to get the rotation matrix
rotate_matrix = cv2.getRotationMatrix2D(center=center, angle=change_angle, scale=1)
print(rotate_matrix)
bound_w = height * np.abs(rotate_matrix[0,1]) + width * np.abs(rotate_matrix[0,0])
bound_h = height * np.abs(rotate_matrix[0,0]) + width * np.abs(rotate_matrix[0,1])
bound_w = int(round(bound_w, 10))
bound_h = int(round(bound_h, 10))
print("new image size (wxh)=", (bound_w, bound_h))
rotate_matrix[0, 2] += (bound_w-1) / 2 - center[0]
rotate_matrix[1, 2] += (bound_h-1) / 2 - center[1]
# rotate_matrix[1,2] += height/2
# rotate the image using cv2.warpAffine
# 90 degree anticlockwise
rotated_image = cv2.warpAffine(src=image, M=rotate_matrix, dsize=(bound_w, bound_h), borderMode=cv2.BORDER_CONSTANT, borderValue=(128, 128, 128))
return rotated_image
def save(data_dir,save_dir,angle):
if not os.path.exists(save_dir):
os.mkdir(save_dir)
for name in os.listdir(data_dir):
save_name = name[:-4] + "_{}.png".format(angle)
img = cv2.imread(os.path.join(data_dir,name))
img_new = flip(img, angle)
cv2.imwrite(os.path.join(save_dir,save_name), img_new)
def main():
Data_dir = "/home/ljs/Desktop/name" # 要改变的图片的路径文件夹
Save_dir = "/home/ljs/Desktop/name_flip" # 要保存的图片的路径文件夹
for i in range(0,361,15):
#print(i)
save(Data_dir, Save_dir, i) # 进行批量处理并且保存
def show():
imgFile = "/home/ljs/Desktop/name/1.png" # 读取文件的路径
img = cv2.imread(imgFile) # flags=1 读取彩色图像(BGR)
cv2.imshow("Demo1", img) # 在窗口 "Demo1" 显示图像 img1
cv2.waitKey(0) # 等待按键命令, 1000ms 后自动关闭
if __name__ == '__main__':
#main()
show()
Python批量旋转图片并保存
于 2022-07-11 08:33:31 首次发布