Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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
C++ 计算关键点的新位置_C++_C_Opencv_Homography_Warp - Fatal编程技术网

C++ 计算关键点的新位置

C++ 计算关键点的新位置,c++,c,opencv,homography,warp,C++,C,Opencv,Homography,Warp,有人能帮我吗,我们如何计算关键点在变换图像中的新位置,关键点是在原始图像中检测到的。我使用opencv单应矩阵和透视图来生成变换后的图像 这是一个密码 ... std::vector< Point2f > points1,points2; for( int i = 0; i < matches1.size(); i++ ) { points1.push_back( keypoints_input1[matches1[i].queryIdx ].pt );

有人能帮我吗,我们如何计算关键点在变换图像中的新位置,关键点是在原始图像中检测到的。我使用opencv单应矩阵和透视图来生成变换后的图像

这是一个密码

...
 std::vector< Point2f > points1,points2;
 for( int i = 0; i < matches1.size(); i++ )
    {
     points1.push_back( keypoints_input1[matches1[i].queryIdx ].pt );
     points2.push_back( keypoints_input2[matches1[i].trainIdx ].pt );
    }
 /* Find the Homography Matrix for current and next frame*/
 Mat H1 = findHomography( points2, points1, CV_RANSAC );
 /* Use the Homography Matrix to warp the images*/
cv::Mat result1;
warpPerspective(input2, result1, H1, Size(input2.cols+150, input2.rows+150),              
INTER_CUBIC);
...
}
。。。
std::vectorpoints1,points2;
对于(int i=0;i
现在我想计算结果1图像中点2的新位置

例如,在下面的变换图像中,我们知道角点。现在我想计算关键点的新位置,比如在变换{(x1,y1),(x2,y2),(x3,y3)…}之前,我们如何计算它


更新:opencv“透视变换”完成了我试图做的事情。

让我们调用
I'
通过使用单应
H
扭曲图像
I
获得的图像

如果在原始图像
I
中提取关键点mi=(xi,yi,1),则可以使用单应变换在扭曲图像
I'
中获得关键点mi:S*mi=H*mi。请注意比例因子S,如果希望关键点坐标以像素为单位,则必须缩放m'i,以便第三个元素为1

如果您想了解比例因子的来源,请查看


此外,还有一个OpenCV函数可以将此转换应用于一组点:
透视转换
()。

这是一个关于数学和转换的问题;不是关于编程…@Chris Maes,计算机视觉是关于编程数学转换的。所以你有一点,我的评论可能不够清楚。但是这个问题显然是一个“如何做我的数学”的问题,而不是一个程序性的问题,不是吗?@ChrisMaes,谢谢你的评论,我真的不知道,如何做,这就是我为什么要问的。我不认为问知道此事的人有什么不对。@MMH我不想粗鲁。我理解你的问题,但你最好粘贴5行代码,说明你如何包装你的图像以及你到底被卡在哪里;这是一个更容易回答的问题。。。我的意见可能是:谢谢,关键点是在I中提取的,而不是在I'中,我想在I'中重新计算它。我想可以用同样的方法计算。thanks@MMH我更新了我的答案。不过,您的问题表明,在转换之前需要关键点坐标。。。下次试着更清楚地描述你的问题;)@嗯,好的,我更新了我的答案,提到了OpenCV函数
透视变换
,它正是你想要的。谢谢,透视变换工作得很好,这正是我想要的。谢谢你。@AldurDisciple这个答案正是我想要的。有什么地方我可以去看一个例子吗?我想我懂数学,但把它付诸实践对我来说有点难。