Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对压缩图像使用cv2.findHomography()_Python_Opencv_Stretch_Homography - Fatal编程技术网

Python 如何对压缩图像使用cv2.findHomography()

Python 如何对压缩图像使用cv2.findHomography(),python,opencv,stretch,homography,Python,Opencv,Stretch,Homography,我正在使用opencv的python绑定。我使用关键点检测和描述(即SURF、SIFT等)查找目标图像中包含的模板图像,但有一个缺点:模板可以在目标图像中“压缩”,因此纵横比与目标图像不同 这不适用于findHomography(),因为它假定一个简单的透视变换,而透视变换不能进行这种拉伸 有没有办法做到这一点?我曾考虑过以不同的量递增拉伸目标图像以改变纵横比,并在每次迭代中使用findHomography,但据我所知,无法比较拟合的质量(因为我使用RANSAC来找到最佳拟合),因此我无法判断它

我正在使用opencv的python绑定。我使用关键点检测和描述(即SURF、SIFT等)查找目标图像中包含的模板图像,但有一个缺点:模板可以在目标图像中“压缩”,因此纵横比与目标图像不同

这不适用于findHomography(),因为它假定一个简单的透视变换,而透视变换不能进行这种拉伸

有没有办法做到这一点?我曾考虑过以不同的量递增拉伸目标图像以改变纵横比,并在每次迭代中使用findHomography,但据我所知,无法比较拟合的质量(因为我使用RANSAC来找到最佳拟合),因此我无法判断它最适合哪种挤压级别

也许通过查看返回的掩码的长度来计算与RANSAC正确匹配的点数?这看起来有点恶心

这不适用于findHomography(),因为它假定一个简单的透视变换,而透视变换不能进行这种拉伸

事实并非如此;即使是仿射扭曲也包括剪切变形,同音字通过非均匀变形来扩展这种变形。例如,由矩阵给出的仿射变换

2 0 0
0 1 0
将图像水平拉伸两倍,如本短程序所示:

import cv2
import numpy as np

img = cv2.imread('lena.png')
affine_warp = np.array([[2, 0, 0], [0, 1, 0]], dtype=np.float32)
dsize = (img.shape[1]*2, img.shape[0])
warped_img = cv2.warpAffine(img, affine_warp, dsize)

cv2.imshow("2x Horizontal Stretching", warped_img)
cv2.waitKey(0)
产生产出:


所以这不是你的问题。同音字允许更强烈的扭曲。您是自己运行
RANSAC
还是让
findHomography()
函数通过
RANSAC
决定您的分数?请发布您的预期输出和当前代码,可能是一个反映您所面临问题的新问题。

谢谢,您完全正确。我的代码工作正常,当我认为我的图像被拉伸时,我错了,它们实际上只是在侧面填充了一些额外的东西。我误解了维基百科关于单应性的文章,它说单应性与“同一平面上的任何两个图像”有关,我认为这意味着在一个平面上有相同的图像。我没有意识到它也可以对仿射变换进行编码。谢谢