使用OpenCV和PIL旋转90,180,270效率对比

这篇博客对比了使用OpenCV的仿射变换、transpose和flip以及PIL的rotate函数批量旋转图像的效率。结果显示,PIL的rotate函数在处理效率上表现最佳,其次是OpenCV的仿射变换,最慢的是使用transpose。测试中对每个方法进行了200次旋转操作。
摘要由CSDN通过智能技术生成

最近需要一个批量旋转图像的程序,现在发现的有3种方法,所以就想看看哪个效率高点,所以进行了以下测试。

1、OpenCV使用仿射变换

这个参考了 OpenCV Python – Rotate Image 90, 180, 270 – Example

import cv2
import time
# read image as grey scale
img = cv2.imread('0916_174.jpg')
# get image height, width
(h, w) = img.shape[:2
                    ]
# calculate the center of the image
center = (w / 2, h / 2)
 
angle90 = 90
angle180 = 180
angle270 = 270
 
scale = 1.0

start = time.time()
# time.sleep(1)
for i in range(200):
# Perform the counter clockwise rotation holding at the center
    # 90 degrees
    M = cv2.getRotationMatrix2D(center, angle90, scale)
    rotated90 = cv2.warpAffine(img, M, (h, w))
    
    # 180 degrees
    M = cv2.getRotationMatrix2D(center, angle180, scale)
    rotated180 = cv2.warpAffine(img, M, (w, h))
    
    # 270 degrees
    M = cv2.getRotationMatrix2D(center, angle270, scale)
    rotated270 = cv2.warpAffine(img, M, (h, w))
end  = time.time()
print(f'cost is {end - start}')
# cost is 1.568622350692749

使用OpenCV的transpose和flip

这个参考OpenCV图像镜像

import cv2
import time 


image = cv2.imread('0916_174.jpg')

# cv2.imshow("image", image)
start = time.time()
# time.sleep(1)
for i in range(200):
#镜像

    image2 = cv2.flip(image, 0)#相对于原图顺时针旋转180度的水平镜像翻转
                               # ,等于转置图像顺时针旋转270度

    # cv2.imshow("2", image2)

    image3 = cv2.flip(image, 1) #相对于原图水平镜像翻转 , 等于转置图像顺时针旋转90度

    # cv2.imshow("3", image3)

    #转置
    image=cv2.transpose(image) #转置图像

    # cv2.imshow("0", image)

    image11 = cv2.flip(image, -1)#等于原图顺时针旋转270度的水平镜像翻转,相对于转置图像顺时针旋转180度

    # cv2.imshow("11", image11)

    # cv2.waitKey(0)
end  = time.time()
print(f'cost is {end - start}')
#cost is 3.548659324645996

3、使用PIL自带的rotate函数

import os
from PIL import Image
import time
img = Image.open('0916_174.jpg')


start = time.time()
# time.sleep(1)
for i in range(200):
    img = img.transpose(Image.ROTATE_90)  # 将图片旋转90度
    img = img.transpose(Image.ROTATE_180)  # 将图片旋转180度
    img = img.transpose(Image.ROTATE_270)  # 将图片旋转270度
# img.show("img/rotateImg.png")
#img.save("img/rotateImg.png")
end  = time.time()
print(f'cost is {end - start}')
#cost is 1.4058425426483154

最后发现PIL函数的旋转效率最好,放射变换其次,transpose最慢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值