我可以在OpenCV中使用重映射获得点位置吗?

时间:2015-12-14 11:15:52

标签: c++ opencv remap

我使用RGB相机拍摄了照片A。我知道照片g中点A的位置。相机需要进行相机校准。现在我想知道校准后点g的位置。我使用的代码如下,但我想获得点位置,而不是图像。我怎样才能做到这一点?你能给我一些建议吗?

initUndistortRectifyMap(
        cameraMatrix,   
        distCoeffs,     
        Mat(),      
        Mat(),      
        Size(640, 480),
        CV_32FC1,      
        map1, map2);  
 remap(A, B, map1, map2, cv::INTER_LINEAR);  

Point2f g = Point2f(...,...);//i want to get the new position of the point not image B   

2 个答案:

答案 0 :(得分:4)

从地图获取坐标:

x,y - 映射前的坐标。

(map1(x,y),map2(x,y)) - 映射后的坐标

换句话说:

  • map1.at<float>(y,x)包含每个点的变换x坐标 P(X,Y)。

  • map2.at<float>(y,x)包含每个点的变换y坐标 P(X,Y)。

请参阅remap函数的文档。

答案 1 :(得分:0)

我发现最好的方法是重新创建一个带有反转参数的相机矩阵。工作在一定程度上,像基本的图像修改