12-图像的仿射(平移、旋转)

复制代码
    在对图像进行操作的过程中,经常会遇到要将图像进行平移或旋转的情况。使用 OpenCV 提供的 cv2.warpAffine()函数实现图像的仿射操作,从而进一步通过仿射实现图像的平移、旋转等操作。
    原始图像:
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/37224f7b1d664b40915ff7992b3d2f70.png)

代码-1:(图像的平移)

python 复制代码
import cv2
import numpy as np
original = cv2.imread('images/original.jpg')
rows ,cols = original.shape[:2]
# 设置平移位置: 向下100像素,向右200像素
M = np.float32([[1,0,100],[0,1,200]])
# 仿射变换
rst = cv2.warpAffine(original,M,(cols,rows))
cv2.imshow('original', original)
cv2.imshow('rst', rst)
cv2.waitKey(0)
cv2.destroyAllWindows()

执行结果:

代码解读:

将原始图像src向右移动100个像素,向下移动200个像素,则对应的关系为dst(x,y)=src(x+100,y+200)

语法格式:

dst(x,y) = src(1x+0 y+100,0x+1 y+200)

根据上述表达式,可以确定对应的转换矩阵M中各个元素的值为:

M=[[1,0,100],[0,1,200]]

将 M 代入到 cv2.warpAffine( src, M, dsize) 函数中,就可以实现图像的平移

代码-2:(图像的旋转)

python 复制代码
import cv2

original = cv2.imread('images/original.jpg')
rows ,cols = original.shape[:2]
# 获取旋转矩阵:参数1:旋转中心,参数2:旋转角度,参数3:缩放比例
M = cv2.getRotationMatrix2D((cols/2,rows/2),45,0.5)
# 仿射变换
rst = cv2.warpAffine(original,M,(cols,rows))
cv2.imshow('original', original)
cv2.imshow('rst', rst)
cv2.waitKey(0)
cv2.destroyAllWindows()

执行结果:

在使用函数 cv2.warpAffine()对图像进行旋转时,可以通过函数cv2.getRotationMatrix2D()获取转换矩阵。

语法结构:

retval=cv2.getRotationMatrix2D(center, angle, scale)

  • center 为旋转的中心点
  • angle 为旋转角度,正数表示逆时针旋转,负数表示顺时针旋转
  • scale 为变换尺度(缩放大小),该值如果是 1 则图像比例不变。

利用函数 cv2.getRotationMatrix2D()可以直接生成要使用的转换矩阵 M。

代码-3:(复杂的图像变换)

python 复制代码
import cv2
import numpy as np

original = cv2.imread('images/original.jpg')
rows, cols, ch = original.shape
# 设置变换矩阵: 输入图像的坐标点 (左上、右上、左下)
p1 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]])
# 设置变换矩阵: 输出图像的坐标点(左上、右上、左下)
p2 = np.float32([[0, rows * 0.33], [cols * 0.85, rows * 0.2], [cols * 0.15, rows * 0.7]])
M = cv2.getAffineTransform(p1, p2)
rst = cv2.warpAffine(original, M, (cols, rows))
cv2.imshow('original', original)
cv2.imshow('rst', rst)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

代码解读:

对于更复杂仿射变换 OpenCV 提供了函数 cv2.getAffineTransform()来生成仿射函数 cv2.warpAffine()所使用的转换矩阵 M。

语法格式:

retval=cv2.getAffineTransform(src,dst) 其中:

src 代表输入图像的三个点坐标dst 代表输出图像的三个点坐标。

相关推荐
青主创享阁7 小时前
玄晶引擎XgenCore Works V2.8.1升级解析 技术迭代赋能场景 代理模式全新落地
大数据·人工智能·代理模式
大写-凌祁8 小时前
OpenClaw 腾讯云服务本地访问配置指南
人工智能·云计算·腾讯云·agi
计算机科研狗@OUC8 小时前
(cvpr25) MP-HSIR: 面向通用高光谱图像复原的多提示框架
人工智能·深度学习·图像修复·高光谱图像
桃花猿8 小时前
大模型Token入门详解:概念、原理、换算与核心作用【AI基础】
人工智能·chatgpt
uesowys8 小时前
腾讯云使用OpenClaw搭建企业微信AI助手
人工智能·企业微信·腾讯云·openclaw
irpywp8 小时前
OpenShell:安全沙箱隔离的沙箱隔离技术
人工智能·安全
勾股导航11 小时前
大模型Skill
人工智能·python·机器学习
卷福同学13 小时前
【养虾日记】Openclaw操作浏览器自动化发文
人工智能·后端·算法
春日见14 小时前
如何入门端到端自动驾驶?
linux·人工智能·算法·机器学习·自动驾驶
光锥智能14 小时前
从自动驾驶到 AI 能力体系,元戎启行 GTC 发布基座模型新进展
人工智能