其他分享
首页 > 其他分享> > 07. 图像的翻转、旋转、仿射变换、透视变换

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

作者:互联网

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

示例一:透视变换,自己手机拍照,将其达到扫描全能王的操作一样;

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