Opencv-Python逆透视变化处理图片

Opencv-Python逆透视变化处理图片

        • 1.效果:
        • 2.主要函数:
        • 3.程序源码:
        • 4.原理:

1.效果:

Opencv-Python逆透视变化处理图片_第1张图片

2.主要函数:

cv2.getPerspectiveTransform(src, dst)
  • src:源图像中待测矩形的四点坐标

  • sdt:目标图像中矩形的四点坐标

    因此我们要进行逆透视变化首先需要得到源图像的四个顶角的坐标。得到之后代入这个函数实现逆透视变化

3.程序源码:

import cv2
import numpy as np
img =cv2.imread('C:/Users/Super_chao/Pictures/Camera Roll/Inverse perspective.jpg')
Y, X= img.shape[:2]
print(X, Y)
list_pst=[]

def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
    list_xy = []
    if event == cv2.EVENT_LBUTTONDOWN:
        xy = "%d,%d" % (x, y)
        list_xy.append(x)
        list_xy.append(y)
        print(list_xy)
        cv2.circle(img, (x, y), 1, (255, 0, 0), thickness=-1)
        cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN,
                    1.0, (255, 255, 0), thickness=1)
        cv2.imshow("original_img", img)
        list_pst.append(list_xy)
        if(len(list_pst)==4):
            # 原图中书本的四个角点(左上、右上、左下、右下),与变换后矩阵位置
            pts1 = np.float32(list_pst)
            pts2 = np.float32([[0, 0], [X, 0], [0, Y], [X, Y]])

            # 生成透视变换矩阵;进行透视变换
            M = cv2.getPerspectiveTransform(pts1, pts2)
            dst = cv2.warpPerspective(img, M, (X, Y))

            cv2.imshow("result", dst)


cv2.namedWindow("original_img")
cv2.setMouseCallback("original_img", on_EVENT_LBUTTONDOWN)
cv2.imshow("original_img", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

运行程序后分别点击你想要逆透视图像部分的左上、右上、左下、右下顶点,然后就可以看到运行的结果了。(记住顺序不能反哦)

4.原理:

参考博客: 图像逆透视原理及实现

你可能感兴趣的:(Opencv-Python)