欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

比较两种对图像进行指定角度旋转的算法(批量操作)

程序员文章站 2024-02-12 08:23:10
...

比较两种对图像进行指定角度旋转的算法(批量操作)

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)
相关标签: 图像旋转