1

假设我有一个源图像,而不是使用 getPerspectiveTransform 和 cv::warpPerspective 转换为 dst 图像。之后我的源图像中有特殊的点向量,我想在我的 dst 图像中获取或绘制它们,我认为这很明显,但我没有这样做,以更好地解释我遇到的问题带有棋盘的样本:

.................................
transformationMatrix= cv::getPerspectiveTransform(src_Point, quad_pts);
            cv::warpPerspective(src, dst, transformationMatrix, dst.size()/,CV_INTER_LINEAR,cv::BORDER_ISOLATED); 

这项工作很好,所以现在我改变了我的 src 框架的视角。转换我的点,然后把它们放在 dst 我写了这个小函数

std::vector<cv::Point2f> warpStuff(std::vector<cv::Point2f> inputVector , cv::Mat transformationMatrix){
    cv::Matx33f warp = transformationMatrix;
    cv::Point3f homogenous;
    std::vector<cv::Point2f> result;

    for (int k  =0;  k < inputVector.size()-1; k++ ){
        homogenous = warp* inputVector[k];
        result.push_back(cv::Point2f(homogenous.x,homogenous.y));
    }

    return result;
}

当尝试在 dst 中绘制结果向量时,我没有得到它们位置的点?

这是我的源图片 来源

在转换之后,当在这里绘制结果时,我得到的是:

dst 图像

我认为问题在于 cv::warpPerspective 除了使用变换矩阵之外还使用了 dst 图像的大小,我试图调试这些东西,但我真的不明白它对这个大小有什么作用,所以我可以添加这个到我的功能!

有什么建议吗?

4

0 回答 0