visual-c++ - 在点上运行 cv::warpPerspective

标签 visual-c++ opencv

我在图像上运行 cv::warpPerspective() 函数,以及如何获取我在源图像中获得的结果图像的某些点的位置,这是我来了多远:

 int main (){
    cv::Point2f srcQuad[4],dstQuad[4];
    cv::Mat warpMatrix;
    cv::Mat src, dst,src2;
    src = cv::imread("card.jpg",1);
            srcQuad[0].x = 0; //src Top left
    srcQuad[0].y = 0;
    srcQuad[1].x = src.cols - 1; //src Top right
    srcQuad[1].y = 0;
    srcQuad[2].x = 0; //src Bottom left
    srcQuad[2].y = src.rows - 1;
    srcQuad[3].x = src.cols -1; //src Bot right
    srcQuad[3].y = src.rows - 1;
    dstQuad[0].x = src.cols*0.05; //dst Top left
    dstQuad[0].y = src.rows*0.33;
    dstQuad[1].x = src.cols*0.9; //dst Top right
    dstQuad[1].y = src.rows*0.25;
    dstQuad[2].x = src.cols*0.2; //dst Bottom left
    dstQuad[2].y = src.rows*0.7;
    dstQuad[3].x = src.cols*0.8; //dst Bot right
    dstQuad[3].y = src.rows*0.9;

    warpMatrix =cv::getPerspectiveTransform(srcQuad,dstQuad);

    cv::warpPerspective(src,dst,warpMatrix,src.size());
    cv::imshow("source", src);
    cv::imshow("destination", dst);
    cv::warpPerspective(dst,src2,warpMatrix,dst.size(),CV_WARP_INVERSE_MAP);
    cv::imshow("srouce 2 " , src2);
    cv::waitKey();
    return 0;

我的问题是,如果我从 dst 选择一个点,如何在 ** src 或 src2 ** 中获取它的坐标,因为 cv::warpPerspective 函数没有t 将 cv::Point 作为参数 ??

最佳答案

您需要 perspectiveTransform(作用于点向量)而不是 warpPerspective。 取 warpMatrix 的逆;您可能需要调整最后一列。

vector<Point2f> dstPoints, srcPoints;
dstPoints.push_back(Point2f(1,1));

cv::perspectiveTransform(dstPoints,srcPoints,warpMatrix.inv());

关于visual-c++ - 在点上运行 cv::warpPerspective,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17852182/

相关文章:

c++ - libcurl:一段时间后,curl_easy_perform 失败并显示 CURLE_SSL_CACERT_BADFILE

c++ - C++ : Visual C++ mangles method signature differently from mangled method in dll 中 Unresolved external 问题

android - 使用 __android_log_print 打印 Opencv Mat、Android NDK 的内容

c++ - 将位图转换为垫子

java - android studio 中的 Opencv 不起作用?

python - OpenCV如何平滑轮廓,降低噪声

c++ - 由于成员函数与参数类型的名称冲突,模板构造函数在 MSVC 中失败

c++ - 在 Visual Studio 2010 中使用 boost::test - 如何查看测试输出?

c++ - 当进程结束时,处于 Sleep() 中间的线程会发生什么?

c++ - Vector-Matrix-Multiplication 在 OpenCV C++ 接口(interface)中非常慢