opencv 图像的平移和旋转

warpAffine函数讲解,图片可自行下载,也可用自己的图片

原图im

平移im_shifted

旋转im_rotated

python 复制代码
# 图像仿射变换
# 步骤: 读取图像 -> 创建仿射变换矩阵 -> 仿射变换计算
#    平移变换矩阵:一种写法,直接写死
#    旋转变换矩阵:根据角度、中心点、缩放比例计算

import numpy as np
import cv2

def translate(img, x, y):
    '''
    仿射变换之平移变换
    :param img: 原始图像
    :param x: x方向平移的像素点 x参数为正,图像向右平移,x参数为负,图像向左平移
    :param y: y方向平移的像素点 y参数为正,图像上下平移,y参数为负,图像向上平移
    :return: 平移后的图像
    '''
    h, w = img.shape[:2] # 取出图像高度和宽度(shape返回值(高, 宽, 通道数))
    # 构建平移变换矩阵 x轴 方向平移 x个像素点,y轴 方向平移 y个像素点
    M = np.float32([[1, 0, x],
                    [0, 1, y]])
    # 执行仿射变换:warpAffine
    shifted = cv2.warpAffine(img, # 原图
                             M,   # 仿射变换矩阵
                             (w, h)) # 输出图像的宽、高
    return shifted

def rotate(img, angle, center=None, scale=1.0):
    '''
    仿射变换之图像旋转
    :param img: 原图数据
    :param angle: 旋转的角度  正数为逆时针旋转,负数为顺时针旋转
    :param center: 旋转中心点,坐标值(x,y),默认为None
    :param scale: 缩放比例,默认为1.0,默认不做缩放
    :return: 旋转变换后的图像
    '''
    h, w = img.shape[:2] # 取图像的高、宽
    # 判断center是否为空,为空则计算原图的中心作为旋转中心点
    if center is None:
        center = (w/2, h/2) # 计算原图 中心点 x,y坐标值
    # 计算仿射变换矩阵
    M = cv2.getRotationMatrix2D(center, # 旋转中心
                                angle,  # 旋转角度
                                scale)  # 缩放比例
    # 根据仿射变换矩阵,执行旋转,并返回旋转后的结果
    rotated = cv2.warpAffine(img, M, (w, h))
    return rotated

# 写一个自己本地存放图片的路径
im = cv2.imread("../img_data/lena.jpg")
cv2.imshow("im", im)
im_shifted = translate(im, 50, 50)
cv2.imshow("im_shifted", im_shifted)

im_rotated = rotate(im, -135, None, 1.0)
cv2.imshow("im_rotated", im_rotated)


cv2.waitKey()
cv2.destroyAllWindows()
相关推荐
AIGS0017 分钟前
企业AI落地:从RAG到AgentRAG的技术跃迁
java·人工智能·人工智能ai大模型应用
程序员cxuan9 分钟前
Claude Code 焚诀(一):Claude Code 六种心智模型
人工智能·后端
FlagOS智算系统软件栈14 分钟前
FlagOS技术工作坊:当AI开始“自己部署自己”,大模型基础设施进入“无人驾驶”时代
人工智能
一楼的猫20 分钟前
AI写作检测机制技术深度解析:200+维度检测、叙事指纹与网文AI辅助怎么过审
人工智能·学习·安全·chatgpt·ai写作
心中有国也有家25 分钟前
鸿蒙 Flutter 本地存储实战:Hive CE 从入门到精讲
人工智能·hive·flutter·华为·harmonyos
雪隐30 分钟前
用Flutter做背单词APP-01服务器?不存在的,我家里就有
前端·人工智能·后端
仙逆GPT35 分钟前
使用 Codex 处理项目时,怎样减少无关修改和重复返工?
人工智能·chatgpt·codex
Web极客码43 分钟前
跨国网络抖动下的 AI 爬虫流调优:我如何用 Claude 打造“智能退避”资讯清洗管道
网络·人工智能·爬虫
拾21443 分钟前
SCI论文绘图
人工智能
QZSJTR1 小时前
企业GEO优化常见性的疑问解答
人工智能·搜索引擎·ai搜索优化·geo优化