07. 图像的翻转、旋转、仿射变换、透视变换
2022/6/23 23:22:39
本文主要是介绍07. 图像的翻转、旋转、仿射变换、透视变换,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
图像的翻转、旋转、仿射变换、透视变换
- flip 翻转操作,flipCode=0上下翻转,>0左右翻转,<0上下+左右翻转
- rotate 旋转操作,只能三种旋转方式,以cv2.ROTATE_开头
- warpAffine 仿射变换是图像旋转,缩放,平移的总称,具体的做法是通过一个矩阵和原图片坐标进行计算,得到新的坐标,完成变换,关键在于矩阵M,注意该矩阵会参与计算,要求类型为float, 如np.float32([[1, 0, tx], [0, 1, ty]])进行平移操作
- getRotationMatrix2D 得到仿射变换矩阵M,仿射变换的难点就在于计算仿射矩阵M,通过该工具可以快速得到矩阵M,对于仿射变换,矩阵M是2*3的
- warpPerspective 透视变换,对于透视变换,矩阵M是3*3的
- getPerspectiveTransform 获取透视变换的变换矩阵,需要4个对应的点
示例一:透视变换,自己手机拍照,将其达到扫描全能王的操作一样;
import cv2 import numpy as np bg = cv2.imread('./images/1655271474337.jpg') print(bg.shape) # (3472, 4624, 3) 大概3:4 # def mouse_callback(event, x, y, flags, userdata): # if event == cv2.EVENT_LBUTTONDOWN: # print("坐标:", x, ", ", y) # 绘制背景色 window_name = 'window' cv2.namedWindow(window_name, cv2.WINDOW_NORMAL) cv2.resizeWindow(window_name, (800, 600)) cv2.imshow(window_name, bg) # 这个添加鼠标的回调是为了通过鼠标来确定图片所在位置,得到的是点在图片中的像素坐标,与窗口被缩放了没有关系 # cv2.setMouseCallback(window_name, mouse_callback) # 这里要特别注意,要参与计算,是float32,不然会报错 coords = np.float32([[254, 393], [4300, 500], [236, 2702], [4259, 2708]]) coords2 = np.float32([[0, 0], [800, 0], [0, 600], [800, 600]]) M = cv2.getPerspectiveTransform(coords, coords2) bg2 = cv2.warpPerspective(bg, M, (800, 600)) cv2.imshow("bg2", bg2) cv2.waitKey(0) cv2.destroyAllWindows()
示例二:结合前面对窗口的操作,实现动态选择4个点来达到9-1的效果;将作业进行了修改:叠加水印
import cv2 as cv import numpy as np bg = cv.imread('./images/bg.jpg') logo = cv.imread('./images/burn.png') print(bg.shape) print(logo.shape) bg_section = bg[0:128, 0:128, :] # 叠加水印,logo的透明度0~1之间 alpha = 0.3 bg_section = bg_section*(1-alpha) + logo*alpha bg[0:128, 0:128, :] = bg_section cv.namedWindow('image', cv.WINDOW_NORMAL) cv.resizeWindow('image', 800, 600) cv.imshow('image', bg) cv.waitKey(0) cv.destroyAllWindows()
这篇关于07. 图像的翻转、旋转、仿射变换、透视变换的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南