2

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

cv :: LogPolar_Interp和cv :: LogPolar_Adjacent()为此目的。

的问题是,我不知道如何使用它们产生类似this one

变换的图像我与它的参数播放,但我无法得到期望的结果。

这是我的尝试:

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); 

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

回答

3

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

通过将您的代码更改为下面的代码,您可能会得到您正在寻找的内容。

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);