ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

07. 图像的翻转、旋转、仿射变换、透视变换

2022-06-23 22:33:54  阅读:199  来源: 互联网

标签:bg 07 矩阵 cv2 window 仿射变换 cv 翻转


图像的翻转、旋转、仿射变换、透视变换

  • 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()

标签:bg,07,矩阵,cv2,window,仿射变换,cv,翻转
来源: https://www.cnblogs.com/TheoryDance/p/16407013.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有