3

对于我的项目的一部分,我需要在图像上应用对数极坐标变换。我发现OpenCV中有一个类叫做:

cv::LogPolar_Interp 和 cv::LogPolar_Adjacent() 用于此目的。

问题是我不知道如何使用它们来生成转换后的图像,例如这个

我玩过它的参数,但我无法得到想要的结果。

这是我的尝试:

    cv::LogPolar_Interp *LogPolar=new cv::LogPolar_Interp(inputFrame.cols,inputFrame.rows,cv::Point2i(inputFrame.cols/2,inputFrame.rows/2),120,20,CV_INTER_LINEAR, 1,117,1);

    logPolar_out=LogPolar->to_cartesian(inputFrame);

有谁知道我怎么能得到这个。谢谢

4

1 回答 1

4

您应该首先将输入图像映射到皮层坐标,然后将其重新映射到笛卡尔坐标。如果您想利用相邻映射,您还必须将图像转换为灰度。

通过将代码更改为以下代码,您可能会得到所需的内容。

    cv::cvtColor(inputFrame,inputFrame,CV_BGR2GRAY);

    cv::LogPolar_Adjacent *logP=new cv::LogPolar_Adjacent(inputFrame.cols,inputFrame.rows,cv::Point2i(inputFrame.cols/2,inputFrame.rows/2));

    logPolar_out=logP->to_cortical(inputFrame);
    logPolar_out=logP->to_cartesian(logPolar_out);
    cv::imshow("Log Polar output",logPolar_out);
    cv::imshow("Log Polar input",inputFrame);
于 2013-03-09T23:14:33.790 回答