[6] opencv: python投射变换

小案例:

把图像中的ROI区域进行投射变换,得到变换后的图像。

原图为(1600w*1200h 来自网络) (图1):
在这里插入图片描述

目的:把原图中的相机部位进行投射到图片左上角(即把相机投射到黄色mask区域) (图2):
在这里插入图片描述

code:
import cv2
import numpy as np

def perspective_test():
    im_src = cv2.imread(r'E:\pic\phone2.jpg')

    pts_src = np.array([[1146, 259], [1452, 510], [1014, 962], [702, 684]]) # 相机ROI
    pts_dst = np.array([[14, 4], [419, 4], [410, 650], [0, 650]]) # 左上角,即黄色mask

    # 画一下图2
    im_trans = im_src.copy()
    cv2.fillConvexPoly(im_trans, pts_dst, (0, 255, 255))
    for i in range(4):
        cv2.line(im_trans, tuple(pts_src[i%4]), tuple(pts_src[(i+1)%4]), (0, 255, 255))
    # cv2.imshow('s', im_trans)
    cv2.imwrite(r'E:\pic\im_show.jpg', im_trans)

    # 得到变换矩阵h (或 m)
    h, status = cv2.findHomography(pts_src, pts_dst)
    # m = cv2.getPerspectiveTransform(pts_src, pts_dst)

    # size = (200, 500) # 取个小尺寸,从(0, 0)点坐标开始取值
    size = (1600, 1200) # 与原尺寸大小相同
    im_out = cv2.warpPerspective(im_src, h, size) # 投射变换, size为变换后的图像尺寸,从左上角(0, 0)开始算起
    # im_out = cv2.warpPerspective(im_src, m, size)

    cv2.imwrite(r'E:\pic\im_src.jpg', im_src)
    cv2.imwrite(r'E:\pic\im_outg100500h.jpg', im_out)

    cv2.waitKey(0)


if __name__ == '__main__':
    perspective_test()

投射变换后:
1,size = (1600, 1200)时,相机ROI及附近像素按照投射矩阵h 投射左上角
在这里插入图片描述

2,size = (200, 500)时,相机ROI及附近像素按照投射矩阵h 投射左上角,因为size尺寸较小,相应部分如下图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值