比较两种对图像进行指定角度旋转的算法(批量操作)
A方法 用了python的3个库函数
1.open cv
2.argparse
3.os
A方法效果如下:
原图像:
按指定角度旋转后的图像:
实现了在分辨率不调整的情况下,对原图像内容旋转,缺失部分用黑色填充
B方法 用了python的3个库函数
1.open cv
2.numpy
3.os
B方法效果如下:
原图像:
按指定角度旋转后的图像:
旋转后,图像内容不会缺失,但图像分辨率对调
A方法代码实现
# -*- coding: utf-8 -*-
import cv2
import os
import imutils
if __name__ == '__main__':
# 读取所有图片的路径
path_original = "./P01_Fe_38/SC_TI/" # 原文件夹,要求文件夹只含有图片
path_target = "./P01_Fe_38/a/" # 目标文件夹
path_images = os.listdir(path_original)
for path_image in path_images:
path_absolute = '{}//{}'.format(path_original, path_image) # 构造绝对路径
# 读取图片
img = cv2.imread(path_absolute)
rotated = imutils.rotate(img, 270)
path_save = '{}//{}'.format(path_target, path_image) # 构造
cv2.imwrite(path_save, rotated)
B方法代码实现
# -*- coding:utf-8 -*-
from math import *
import cv2
import numpy as np
import os
def rotate_bound1(image, angle):
(h, w) = image.shape[:2] # 返回(高,宽,色彩通道数),此处取前两个值返回
# 抓取旋转矩阵(应用角度的负值顺时针旋转)。参数1为旋转中心点;参数2为旋转角度,正的值表示逆时针旋转;参数3为各向同性的比例因子
M = cv2.getRotationMatrix2D((w / 2, h / 2), -angle, 1.0)
newW = int((h * np.abs(M[0, 1])) + (w * np.abs(M[0, 0])))
newH = int((h * np.abs(M[0, 0])) + (w * np.abs(M[0, 1])))
# 调整旋转矩阵以考虑平移
M[0, 2] += (newW - w) / 2
M[1, 2] += (newH - h) / 2
# 执行实际的旋转并返回图像
return cv2.warpAffine(image, M, (newW, newH)) # borderValue 缺省,默认是黑色
if __name__ == '__main__':
path_original = "./imag/" # 原文件夹,要求文件夹只含有图片
path_target = "./imag/abc/" # 目标文件夹
path_images = os.listdir(path_original)
for path_image in path_images:
path_absolute = '{}//{}'.format(path_original, path_image) # 构造绝对路径
# 读取图片
img_origin = cv2.imread(path_absolute)
img = rotate_bound1(img_origin, 90)
cv2.waitKey(100)
path_save ='{}//{}'.format(path_target, path_image) # 构造
cv2.imwrite(path_save, img)