使用Opencv自帶的函數cvCartToPolar可以將座標從普通座標轉化爲極座標,也可以利用cvPolarToCart轉化回來,但在轉化過程中我們可以發現,這函數是以y座標中作爲軸座標的。具體代碼如下:
#include "stdio.h"
#include "cv.h"
#include "highgui.h"
int main(int argc, char* argv[])
{
//建立兩個分別存儲x和y座標的矩陣
CvMat *x=cvCreateMat(3,3,CV_32FC1);
CvMat *y=cvCreateMat(3,3,CV_32FC1);
printf("初始的座標點爲:\n");
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{ //分別對x和y進行賦值
cvmSet(x,i,j,(float)(i+j));
/*
x是要賦值的矩陣,i,j表示矩陣的下標,後面的是要賦得值才,類型與矩陣類型相同
*/
cvmSet(y,i,j,(float)(i+j+5));
printf("(%f,",(float)(i+j));
printf("%f) ",(float)(i+j+5));
}
printf("\n");
}
//定義極座標的兩個座標值
CvMat *magnitude=cvCreateMat(3,3,CV_32FC1);
CvMat *angle=cvCreateMat(3,3,CV_32FC1);
cvCartToPolar(x,y,magnitude,angle,1);
/*
將普通座標轉化爲極座標
x,y,magnitude,angle分別爲矩陣而且相互對應,1是指角度用360度數表示,0是角度用弧度表示
*/
double s1,s2;
printf("極座標的值爲:\n");
for( i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf("(%lf,",cvmGet(magnitude,i,j));//獲取矩陣中的指定元素
printf("%lf) ",cvmGet(angle,i,j));
}
printf("\n");
}
return 0;
}
具體結果如下: