python - 如何反转 warpPerspective()

标签 python c++ opencv matrix linear-algebra

我知道,当我再次使用变换矩阵的逆应用 warpPerspective() 时,我获得了第一张图像:

M = cv2.getPerspectiveTransform(pts1,pts2)
warped = cv2.warpPerspective(img, M, (cols,rows))

# ... some operations, obtain a rectangle

ret, IM = cv2.invert(M)
restored = cv2.warpPerspective(warped, IM, (cols,rows))

但是,我对扭曲应用了一些操作,并在图像上获得了一些位置(例如矩形)。我如何在恢复图像上找到矩形的相应坐标?

感谢使用 python 和 C++ 提供的答案。

最佳答案

M = cv2.getPerspectiveTransform(pts1,pts2)

有了这个矩阵,你就得到了3x3的变换矩阵,其中包括旋转、缩放、平移、投影 vector 。

通过应用warpPerspective,您将从源坐标系(帧{A})移动到目标坐标系(帧{B})。

要从帧 {B} 移回到帧 {A},您需要将矩阵 M 的逆矩阵与帧 {B} 中的点 P 相乘。由于矩阵是 3x3 矩阵,因此您需要将 z = 1 添加到点 P 使其成为 3x1 矩阵。

_, IM = cv2.invert(M)
x1 = 159
y1 = 99
coord = [x1, y1] + [1]
P = np.float32(coord)

x, y, z = np.dot(IM, P)
#Divide x and y by z to get 2D in frame {A}
new_x = x/z
new_y = y/z

关于python - 如何反转 warpPerspective(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34989513/

相关文章:

python - 如何验证 python 是否使用 Open SSL Libraries 编译

c++ - 使用 ESP8266 自动检测本地服务器

c++ - DLIB 是用于在 C++ 中开发我自己的机器学习算法的良好开源库吗?

c++ - 优化 “coincidence search”算法以提高速度

opencv - 如何在opencv 2.4.9中启用findEssentialMat?

python - 如何从 Flask 提供 create-react-app 服务?

python - 使用子掩码掩码 numpy 数组

android - 适用于Android的OpenCV示例

visual-studio-2010 - 如何使用OpenCV 247和Visual Studio 2010声明用于存储轮廓的矢量?

python - 在 MacOS big sur 上安装 jupyterlab/jupyter notebook 时出错