在csdn有博客,可这里查询积分得是正值,所以没办法只有写一片喽~
很好的学习地方!
写篇关于Opencv数极变换的例子把。
当然Opencv对于极坐标变换也是有基础的函数的,这个跟前面说的两个变换一样。一个是仿射变换cvWarpAffine(),透视变换中用到的重映射cvRemap();另一个是拉普拉斯变换和霍夫圆霍夫线中的卷积cvFilter2D()和sobel()。
#include <cv.h>
#include <highgui.h>
int main(int argc, char** argv)
{
IplImage* src;
double M;
if( argc == 3 && ((src=cvLoadImage(argv[1],1)) != 0 ))
{
M = atof(argv[2]);
IplImage* dst = cvCreateImage( cvGetSize(src), 8, 3 );
IplImage* src2 = cvCreateImage( cvGetSize(src), 8, 3 );
cvLogPolar( src, dst, cvPoint2D32f(src->width/2,src->height/2), //变换的中心点是源图片的中心点
M, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS );//M缩放比例
cvLogPolar( dst, src2, cvPoint2D32f(src->width/2,src->height/2),//再次变回来
M, CV_INTER_LINEAR+CV_WARP_INVERSE_MAP );
cvNamedWindow( "log-polar", 1 );
cvShowImage( "log-polar", dst );
cvNamedWindow( "inverse log-polar", 1 );
cvShowImage( "inverse log-polar", src2 );
cvWaitKey();
}
return 0;
}
终于可以不用把原图片像色彩变换那种的改变成单通道的灰度图(可以看出左边的变换并不需要),也不用canny了!