如何获得透视变形图像中某个点的(x,y)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得透视变形图像中某个点的(x,y)?相关的知识,希望对你有一定的参考价值。

我对原始图像有一个观点,我对图像进行了透视变换。现在如何在扭曲的图像上获得此点的像素?这是一个例子:

import cv2
import numpy as np

original_img = cv2.imread('1.jpg')
# one point(400,560) on the original image
cv2.circle(original_img, (400,560), 7, (0,255,255), -1)
original_points = np.float32([(0,560), (0,450), (795,568), (795,748)])
destination_points = np.float32([(0,400), (0,0), (600,0), (600,400)])
# transformation matrix
M = cv2.getPerspectiveTransform(original_points, destination_points)
# warp perspective
warpped_img = cv2.warpPerspective(original_img, M, (600,400))
cv2.imshow('original', original_img)
cv2.imshow('warpped', warpped_img)
cv2.waitKey(0)

这是原始图像:enter image description here

这是扭曲的结果:enter image description here

原始图像上的点是(400,560)。如何在经过扭曲的图像上计算出这一点的像素?

答案
import cv2
import numpy as np

original_img = cv2.imread('1.jpg')
# one point(400,560) on the original image
cv2.circle(original_img, (400,560), 7, (0,255,255), -1)
original_points = np.float32([(0,560), (0,450), (795,568), (795,748)])
destination_points = np.float32([(0,400), (0,0), (600,0), (600,400)])
# transformation matrix
M = cv2.getPerspectiveTransform(original_points, destination_points)
pt =  np.array([[[400,560]]], dtype=np.float32)
dst_pt = cv2.perspectiveTransform(pt, M)
dst_pt = dst_pt.astype(int)
dst_pt = tuple(dst_pt[0,0,].tolist())
# warp perspective
warpped_img = cv2.warpPerspective(original_img, M, (600,400))
cv2.circle(warpped_img, dst_pt, 7, (0,255,255), -1)
cv2.imshow('original', original_img)
cv2.imshow('warpped', warpped_img)
cv2.waitKey(0)

以上是关于如何获得透视变形图像中某个点的(x,y)?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得世界空间中二维点的射线方程

Android开发中 在Activity中 如何实时监听 Service 中某个变量的变化?

CGAffineTransform-仿射矩阵的变换

HDU6089 恐怖分子(变形线段树)

如何使用变形网格扭曲图像

4D转3D透视投影