OpenCV 3:openCV 3.3.1 中的透视变换有啥问题?

Posted

技术标签:

【中文标题】OpenCV 3:openCV 3.3.1 中的透视变换有啥问题?【英文标题】:OpenCV 3: What's the issue with Perspective Transformation in openCV 3.3.1?OpenCV 3:openCV 3.3.1 中的透视变换有什么问题? 【发布时间】:2017-11-06 04:50:34 【问题描述】:

我正在尝试文档中的透视变换示例,但得到的结果与示例不同。

import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('sudoku.png')
rows,cols,ch = img.shape
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
M = cv2.getPerspectiveTransform(pts1,pts2)
dst = cv2.warpPerspective(img,M,(300,300))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()

根据示例的结果应该如下所示 (忽略绿线)

而我得到的看起来像

有什么想法吗?我在 macOS 10.13、openCV 3.3.1 并使用 python 3.6

【问题讨论】:

输入图片的尺寸是多少?您是如何选择 pts1 点的? 文档示例中都给出了。 你可以从 x,y 轴清楚地看到,你的图像比你用绿色十字显示的要大......来吧,有点努力...... 【参考方案1】:

你的坐标有误。

## sudo.png (563, 558, 3)

## tl->tr->br->bl
pts1 = np.float32([[76,85],[490,70],[520,520],[35,512]])
pts2 = np.float32([[0,0],[300,0],[300,300], [0,300]])

【讨论】:

你是用matplotlib来绘图的吗?我仍然没有得到结果。 对我有用的正确顺序是 tl -> tr -> bl -> br 你还困在这里面吗?这是更高级主题的有趣帖子,我正在尝试解决它。你可以看看。 ***.com/questions/10196198/…

以上是关于OpenCV 3:openCV 3.3.1 中的透视变换有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

opencv矩阵运算

linux qt ros opencv error while loading shared libraries

linux qt ros opencv error while loading shared libraries

Linux中安装opencv-3.3.1

在 Windows7 中运行 conda install -c menpo opencv3=3.2.0 失败

Qt opencv编译详细教程(windows版)