OpenCV的投影变换

投影原理:如果物体在三维空间中发生了旋转,那么这种变换通常被称为投影变换。由于可能出现阴影或者遮挡,所以该种投影变换很难被修正。如果物体是平面的,那么就能通过二维投影变换对此物体三维变换进行模型化。

OpenCV提供了函数:cv2.getPerspectiveTransform(src,dst)

该函数来计算投影变换矩阵,该函数需要输入四组对应的坐标变换,其中src对应原坐标,dst对应变换后的坐标,返回值是3X3的投影矩阵,srcdst分别是4X2的二维ndarray,其中每一行代表一个坐标,而且数据类型必须是32位浮点型。

OpenCV提供函数:cv2.warpPerspective(src,M,dsize[,dst[,flags[,borderMode[,borderValue]]]])

该函数实现投影变换功能

使用python实现投影变换的代码如下:

# -*- coding:utf-8 -*-

import numpy as np

import cv2

import sys

#主函数

if __name__ == "__main__":

    if len(sys.argv)>1:

        image = cv2.imread(sys.argv[1],cv2.CV_LOAD_IMAGE_GRAYSCALE)

    else:

        print "请输入图像"

    #原图的高、宽

    h,w = image.shape

    #原图的四个点与投影变换对应的点

    src = np.array([[0,0],[w-1,0],[0,h-1],[w-1,h-1]],np.float32);

    dst = np.array([[50,50],[w/5,30],[30,h-1],[w-10,h-10]],np.float32)

    #计算投影变换矩阵

    p = cv2.getPerspectiveTransform(src,dst)

    #利用计算出的投影变换矩阵进行头像的投影变换

    r = cv2.warpPerspective(image,p,(w,h),borderValue=125)

    #显示原图和投影效果

    cv2.imshow("原图",image)

    cv2.imshow("投影变换后图",r)

    cv2.waitKey(0)

cv2.destroyAllWindows()

其中原图的四个点的顺序依次代表的是[0,0](左上),[w-1,0](右上),[0,h-1](左下),[w-1,h-1](右下)。

运行程序:

                                             

最终得到的效果如下图:

白俊遥博客

白俊遥博客


aliyun
赵群博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论