网站开发课程百度云,湖州网站建设制作,如何查看一个网站是什么程序cms做的,现在网站用什么语言做最好放射变换是图像旋转#xff0c;缩放#xff0c;平移的总称#xff0c;具体的做法是通过一个矩阵和原图片坐标进行计算#xff0c;得到新的坐标#xff0c;完成变换#xff0c;所以关键就是这个矩阵。
一、仿射变换之图像平移
使用API------warpAffine#xff08;src 缩放平移的总称具体的做法是通过一个矩阵和原图片坐标进行计算得到新的坐标完成变换所以关键就是这个矩阵。
一、仿射变换之图像平移
使用API------warpAffinesrc M dsize flags, mode, value
warp弯曲 affine仿射
其中src为图片
M变换矩阵
dsize输出图片大小
flag: 与resize中的插值算法一直
mode:边界外推法标志
value填充边界值
平移矩阵矩阵中的每个像素由xy组成xy表示这个像素的坐标假设沿x轴平移tx沿y轴平移ty那么最后得到的坐标为xy x tx y ty用矩阵表示就是 第一个坐标代表列第二个坐标代表行。
示例代码如下
import cv2
import numpy as npdog cv2.imread(dog.png)
h, w, ch dog.shape
print(dog.shape) # 先行后列# 写下变换矩阵最少是float32位
M np.float32([[1, 0, 200], [0, 1, 0]]) # 第一个对应水平平移第二个对应上下平移
new_dog cv2.warpAffine(dog, M, dsize(w, h)) # 先列后行cv2.imshow(dpg, dog)
cv2.imshow(new_dpg, new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果如下 二、仿射变换之获取变换矩阵
第一中获取变换方程的方法
OpenCV提供了计算变换矩阵的API---getRotationMatrix2D(center, angle, scale)
center: 中心点以图片的哪个点作为旋转时的中心点
angle旋转的角度按照逆时针旋转。
scale缩放比例即想图片进行什么样的缩放
示例代码如下
# M cv2.getRotationMatrix2D((100, 100), 15, 1) # 与原图无关 设定中心点进行旋转
M cv2.getRotationMatrix2D((w/2, h/2), 15, 1) # 按照图片的中心点进行旋转
new_dog cv2.warpAffine(dog, M, dsize(w, h)) # 先列后行输出结果如下 第二种获取变换方程的方法
getAffineTransformsrc[], dst[]通过三点可以确定变换后的位置相当于解方程3个点对应三个方程能解出便宜的参数和旋转的角度。
相当于原图的三个点坐标变为另外三个点的坐标图像按照坐标的格式旋转。
示例代码如下
sre np.float32([[200, 100], [300, 100], [200, 300]]) # 初始三个点的坐标
dst np.float32([[100, 50], [150, 100], [100, 300]]) # 变化后三个点的坐标
M cv2.getAffineTransform(sre, dst)
new_dog cv2.warpAffine(dog, M, dsize(w, h)) # 先列后行
输出结果如下 三、仿射变换之透视变化
透视变化就是将一种坐标系变为另一种坐标系简单来说可以把一张“斜”的图变“正”。
使用API---warpPerspectiveimgM, dsize
对于透视变换来说M是一个3*3的矩阵。
同时使用API---getPerspectiveTransform(src, dst)获取透视变换的变换矩阵需要4个点即图片的四个角。
最后在通过cv.namedWindow对窗口进行缩放
示例代码如下
src np.float32([[100, 200], [500, 200], [100, 600], [500, 600]]) # 原图的四个坐标
dst np.float32([[0, 0], [500, 0], [0, 300], [500, 300]])
M cv2.getPerspectiveTransform(src, dst)
new_dog cv2.warpPerspective(dog, M, (500, 300))
# 创建窗口对图片进行缩放
cv2.namedWindow(dog, cv2.WINDOW_NORMAL)
cv2.resizeWindow(dog, 640, 480)
cv2.imshow(dog, dog)cv2.namedWindow(new_dog, cv2.WINDOW_NORMAL)
cv2.resizeWindow(new_dog, 640, 480)
cv2.imshow(new_dog, new_dog)
输出结果如下 综合演示代码如下所示
import cv2
import numpy as npdog cv2.imread(dog.png)
h, w, ch dog.shape
print(dog.shape) # 先行后列# 写下变换矩阵最少是float32位
# M np.float32([[1, 0, 200], [0, 1, 0]]) # 第一个对应水平平移第二个对应上下平移
# new_dog cv2.warpAffine(dog, M, dsize(w, h)) # 先列后行# 获取变换矩阵
# M cv2.getRotationMatrix2D((100, 100), 15, 1) # 与原图无关 设定中心点进行旋转
# M cv2.getRotationMatrix2D((w / 2, h / 2), 15, 1) # 按照图片的中心点进行旋转
# new_dog cv2.warpAffine(dog, M, dsize(w, h)) # 先列后行# 通过三个点的坐标获取变换矩阵
# sre np.float32([[200, 100], [300, 100], [200, 300]]) # 初始三个点的坐标
# dst np.float32([[100, 50], [150, 100], [100, 300]]) # 变化后三个点的坐标
# M cv2.getAffineTransform(sre, dst)
# new_dog cv2.warpAffine(dog, M, dsize(w, h)) # 先列后行# 透视变换
src np.float32([[100, 200], [500, 200], [100, 600], [500, 600]]) # 原图的四个坐标
dst np.float32([[0, 0], [500, 0], [0, 300], [500, 300]])
M cv2.getPerspectiveTransform(src, dst)
new_dog cv2.warpPerspective(dog, M, (500, 300))# 创建窗口对图片进行缩放
cv2.namedWindow(dog, cv2.WINDOW_NORMAL)
cv2.resizeWindow(dog, 640, 480)
cv2.imshow(dog, dog)cv2.namedWindow(new_dog, cv2.WINDOW_NORMAL)
cv2.resizeWindow(new_dog, 640, 480)
cv2.imshow(new_dog, new_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()