LogPolar 坐标变换
2017-12-02 07:43
253 查看
对于二维图像,Log-Polar表示从笛卡尔坐标到极坐标的变换。
OpenCV中对于数极坐标转换的函数是cvLogPolar():
void cvLogPolar(const CvArr * src , CvArr * det , CvPoint2D32f center , double n , int flags = CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS)
src 和 dst是单通道或三通道的彩色或灰度图像。
center是对数极坐标变换的中心点;
m是缩放比例;
下面以《学习OpenCV》课后题10为例子进行练习
10.进行LogPolar转换
a:如果logPolar的中心点在正方形的一角,画出log-polar的结果;
b:如果中心点在圆里边靠近边缘,那么log-polar变换中的圆的外观?
c:如果中心点在圆的外边,画出圆的外观
OpenCV中对于数极坐标转换的函数是cvLogPolar():
void cvLogPolar(const CvArr * src , CvArr * det , CvPoint2D32f center , double n , int flags = CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS)
src 和 dst是单通道或三通道的彩色或灰度图像。
center是对数极坐标变换的中心点;
m是缩放比例;
下面以《学习OpenCV》课后题10为例子进行练习
10.进行LogPolar转换
a:如果logPolar的中心点在正方形的一角,画出log-polar的结果;
b:如果中心点在圆里边靠近边缘,那么log-polar变换中的圆的外观?
c:如果中心点在圆的外边,画出圆的外观
#include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/highgui.hpp> using namespace std; using namespace cv; int main(int argc, const char * argv[]) { /*1、生成一个图像*/ IplImage * Src1 = cvCreateImage(cvSize(250,250), IPL_DEPTH_32F, 1); cvSetZero(Src1); /*2、克隆图像Src2 和 Src3,生成矩形和圆*/ IplImage * Src2 = cvCloneImage(Src1); Src2->origin = Src1->origin; //设置相同原点 cvSetZero(Src2); cvRectangle(Src1, cvPoint(100, 100), cvPoint(200, 200), CV_RGB(255, 255, 255)); cvCircle(Src2, cvPoint(150, 150), 50, CV_RGB(255,255,255)); cvShowImage("Rect_1", Src1); cvShowImage("Circle", Src2); double M = 50; //缩放比例 /*3、中心点在正方形的中心进行极坐标变换 */ IplImage * Ipolar1 = cvCloneImage(Src1); Ipolar1->origin = Src1->origin; cvSetZero(Ipolar1); CvPoint2D32f center1 = cvPoint2D32f(150, 150); //在矩形中心 cvLogPolar(Src1, Ipolar1, center1, M , CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS); cvShowImage("Ipolar1", Ipolar1); /*4、中心点在正方形的一角进行极坐标变换*/ IplImage * Ipolar2 = cvCloneImage(Src1); Ipolar2->origin = Src1->origin; cvSetZero(Ipolar2); CvPoint2D32f center2 = cvPoint2D32f(100, 100); //矩形边角 cvLogPolar(Src1,Ipolar2 , center2, M , CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS); cvShowImage("Ipolar2", Ipolar2); /*5、中心点在圆里面靠近边缘进行极坐标变换*/ IplImage * Ipolar3 = cvCloneImage(Src2); Ipolar3->origin = Src2->origin; cvSetZero(Ipolar3); CvPoint2D32f center3 = cvPoint2D32f(150, 102); cvLogPolar(Src2, Ipolar3, center3, M , CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS); cvShowImage("Ipolar3", Ipolar3); /*6、中心点在圆里面外边边缘进行极坐标变换*/ IplImage * Ipolar4 = cvCloneImage(Src2); Ipolar4->origin = Src2->origin; cvSetZero(Ipolar4); CvPoint2D32f center4 = cvPoint2D32f(150, 98); cvLogPolar(Src2, Ipolar4, center4, M , CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS); cvShowImage("Ipolar4", Ipolar4); cvWaitKey(0); cvReleaseImage(&Src1); cvReleaseImage(&Src2); cvReleaseImage(&Ipolar1); cvReleaseImage(&Ipolar2); cvReleaseImage(&Ipolar3); cvReleaseImage(&Ipolar4); return 0; }
相关文章推荐
- GDI+托管代码坐标变换矩阵复位问题
- 【算法+OpenCV】图像极坐标变换及基于OpenCV的实现
- 二维坐标变换三维坐标未解答
- 第五讲 坐标变换
- SharpGIS博客翻译2006年7月:在SharpMap中使用即时坐标变换
- HDU 4449 Building Design 三维凸包+空间坐标变换
- 基于VC++的OpenGL编程讲座之坐标变换(3)
- Qt学习之路(28): 坐标变换
- iOS学习之UI初级————CGAffineTransform坐标系统变换以及UIView的属性动画
- <deep learning>读书笔记(一)特征分解与坐标变换
- 移动的坐标变换
- js空间平面坐标变换(涉及文件读取,文本提取数字,特别是x,y点,以及html下拉框设计)
- Direct3D顶点坐标变换
- IOS中二维坐标变换
- 理解SVG坐标系统和变换: transform属性
- 三维世界里的坐标和变换,逆方向旋转移动三维世界的方式来实现3D漫游
- PS 滤镜——平面坐标变换到极坐标
- Opengl渲染管线 坐标变换 纹理与光照
- 简单坐标变换 ch3 (7)
- Opengl三视图的坐标变换