抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 【数据增强】用cv2旋转图像并自定义填充背景颜色(主要用到cv2.getRotationMatrix2D

【数据增强】用cv2旋转图像并自定义填充背景颜色(主要用到cv2.getRotationMatrix2D

时间:2022-09-11 11:24:55

相关推荐

参考链接

🍀Opencv:图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数图像旋转任意角度不缺失,缺失背景指定颜色填充(python+opencv)图文教程和完整项目代码

两种实现效果

ImageRotate:图像高宽发生变化(类似于直接采用PIL的rotation旋转后)

ImageRotate_2:图像高宽发生变化(保留原始图像的所有样式)

结果展示

代码

# -*- coding: utf-8 -*-import cv2import numpy as npfrom PIL import Imagedef ImageRotate(imagepath):image = cv2.imread(imagepath)# 要有中心坐标、旋转角度、缩放系数h, w = image.shape[:2] # 输入(H,W,C),取 H,W 的值center = (w // 2, h // 2) # 绕图片中心进行旋转angle = 45 # 旋转角度scale = 0.8 # 将图像缩放为80%# 1. 获得旋转矩阵M = cv2.getRotationMatrix2D(center=center, angle=-angle, scale=scale) # 当angle为负值时,则表示为顺时针# 2. 进行仿射变换,borderValue:缺失背景填充色彩,默认是黑色(0, 0 , 0),这里指定填充白色# 注意,这里的dsize=(w, h)顺序不要搞反了image_rotation = cv2.warpAffine(src=image, M=M, dsize=(w, h), borderValue=(255, 255, 255))return image_rotationdef ImageRotate_2(imagepath):image = cv2.imread(imagepath)# 要有中心坐标、旋转角度、缩放系数h, w = image.shape[:2] # 输入(H,W,C),取 H,W 的值center = (w // 2, h // 2) # 绕图片中心进行旋转angle = 45 # 旋转角度scale = 0.8 # 将图像缩放为80%# 1. 获得旋转矩阵M = cv2.getRotationMatrix2D(center=center, angle=-angle, scale=scale) # 当angle为负值时,则表示为顺时针# -----------------------计算图像的新边界尺寸、调整旋转矩阵以考虑平移-------------------- #cos = np.abs(M[0, 0])sin = np.abs(M[0, 1])# 计算图像的新边界尺寸nW = int((h * sin) + (w * cos))nH = int((h * cos) + (w * sin))# 调整旋转矩阵以考虑平移M[0, 2] += (nW / 2) - center[0]M[1, 2] += (nH / 2) - center[1]# ------------------------------------------------------------------------------ ## 2. 进行仿射变换,边界填充为255,即白色,borderValue 缺省,默认是黑色(0, 0 , 0)image_rotation = cv2.warpAffine(src=image, M=M, dsize=(nW, nH), borderValue=(255, 255, 255))return image_rotationif __name__ == '__main__':imagepath = r"D:\SoftWareInstallMenu\JetBrains\PycharmProjects\tunnel_datadeal\crackop\images\001.png"img = cv2.imread(imagepath)imgRotation = ImageRotate(imagepath) # 待旋转的原始图像,旋转角度45imgRotation_2 = ImageRotate_2(imagepath) # 待旋转的原始图像,旋转角度45# 显示并保存旋转结果cv2.imshow("img", img)cv2.imshow("imgRotation", imgRotation) # 图像高宽无变化cv2.imshow("imgRotation_2", imgRotation_2) # 图像高宽有变化,图像大小无太大变化cv2.waitKey(0)cv2.destroyAllWindows()cv2.imwrite('imgRotation_crack.png', imgRotation)cv2.imwrite('imgRotation_crack_2.png', imgRotation_2)# 查看图像模式是否有变化,查看现在图像高宽img = Image.open(imagepath)imgRotation_crack = Image.open('imgRotation_crack.png')imgRotation_crack_2 = Image.open('imgRotation_crack_2.png')print(f'img: mode={img.mode}, size={img.size}')print(f'imgRotation_crack: mode={imgRotation_crack.mode}, size={imgRotation_crack.size}')print(f'imgRotation_crack_2: mode={img.mode}, size={imgRotation_crack_2.size}')

【数据增强】用cv2旋转图像并自定义填充背景颜色(主要用到cv2.getRotationMatrix2D 和 cv2.warpAffine)

如果觉得《【数据增强】用cv2旋转图像并自定义填充背景颜色(主要用到cv2.getRotationMatrix2D 》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。