#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream> // center:极坐标的变换中心
// minr:变换中心的最小距离
// mintheta:最小距离
// thetaStep:角度的变换步长
// rStep:距离的变换步长
cv::Mat polar(cv::Mat I,cv::Point2f center,cv::Size size,float minr=,float mintheta=,float thetaStep=1.0/,float rStep=1.0){
cv::Mat ri=cv::Mat::zeros(cv::Size(,size.height),CV_32FC1);
for(int i=;i<size.height;++i)
ri.at<float>(i,)=minr+i*rStep;
cv::Mat r=cv::repeat(ri,,size.width);
cv::Mat thetaj=cv::Mat::zeros(cv::Size(size.width,),CV_32FC1);
for(int i=;i<size.width;++i)
thetaj.at<float>(,i)=mintheta+i*thetaStep;
cv::Mat theta=cv::repeat(thetaj,size.height,);
cv::Mat x,y;
cv::polarToCart(r,theta,x,y,true);
x+=center.x;
y+=center.y;
cv::Mat dst =*cv::Mat::ones(size,CV_8UC1);
for(int i=;i<size.height;++i){
for(int j=;j<size.width;++j){
float xij=x.at<float>(i,j);
float yij=y.at<float>(i,j);
int nearestx=int(round(xij));
int nearesty=int(round(yij));
if((<=nearestx&&nearestx<I.cols)&&(<=nearesty&&nearesty<I.rows))
dst.at<uchar>(i,j)=I.at<uchar>(nearesty,nearestx);
}
}
return dst;
} int main(){
cv::Mat I=cv::imread("/home/nan/图片/openimage/circleWithText.jpg",cv::IMREAD_GRAYSCALE);
if(!I.data) return -;
float thetaStep=1.0/; // thetaStep=0.25代表整个圆环,thetaStep=0.5代表半个圆环,thetaStep=1代表1/4个圆环。
float minr=;
cv::Size size (int(/thetaStep),); //50:圆环文字的大致高度。
// 圆环角度范围为(0,360),输出圆环图像的宽度为(360/thetaStep):
cv::Mat dst=polar(I,cv::Point2f(,),size,minr);
//cv::imshow("极坐标变换0:",dst);
cv::flip(dst,dst,); // 0 meansflipping around the x-axis and positive value (for example, 1) means
// flipping around y-axis. Negative value (for example, -1) means flipping around both axes.
cv::imshow("I",I);
cv::imshow("最近邻插值极坐标变换:",dst); cv::linearPolar(I,dst,cv::Point2f(,),,cv::INTER_LINEAR);
cv::imshow("线性插值极坐标变换:",dst); cv::logPolar(I,dst,cv::Point2f(,),,cv::WARP_FILL_OUTLIERS);
cv::imshow("对数极坐标变换:",dst);
//cv::InterpolationFlags
cv::waitKey();
return ;
}

opencv C++极坐标变换的更多相关文章

  1. OpenCV图像变换二 投影变换与极坐标变换实现圆形图像修正

    投影变换 在放射变换中,物体是在二维空间中变换的.如果物体在三维空间中发生了旋转,那么这种变换就成为投影变换,在投影变换中就会出现阴影或者遮挡,我们可以运用二维投影对三维投影变换进行模块化,来处理阴影 ...

  2. Photoshop和Halcon中的极坐标变换

    极坐标想必学过高中数学的人都听过,一般的坐标系中用(x, y)值来描述一个点的位置,而在极坐标系中,则使用到原点的距离ρ和夹角θ来描述该点的位置. 我很早就接触了Photoshop,知道Photosh ...

  3. Python: PS 滤镜-- 极坐标变换到平面坐标

    本文用 Python 实现 PS 中的一种滤镜 极坐标变换到平面坐标,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/de ...

  4. OpenCV——PS 滤镜算法之极坐标变换到平面坐标

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  5. opencv之形态变换

    形态变换 在opencv之膨胀与腐蚀中介绍了Dilation/Erosion的原理.建议先读这一篇,搞懂原理. 这样就可以很轻松地理解为什么本文的这些形态变换可以取得相应的效果. 基于此,我们可以组合 ...

  6. OpenCV仿射变换+投射变换+单应性矩阵

    本来想用单应性求解小规模运动的物体的位移,但是后来发现即使是很微小的位移也会带来超级大的误差甚至错误求解,看起来这个方法各种行不通,还是要匹配知道深度了以后才能从三维仿射变换来入手了,纠结~ esti ...

  7. PS 滤镜——极坐标变换到平面坐标

    %%% 极坐标到平面坐标 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorith ...

  8. opencv::基于距离变换与分水岭的图像分割

    什么是图像分割 图像分割(Image Segmentation)是图像处理最重要的处理手段之一 图像分割的目标是将图像中像素根据一定的规则分为若干(N)个cluster集合,每个集合包含一类像素. 根 ...

  9. opencv 仿射变换 投射变换, 单应性矩阵

    仿射 estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变. getAffineTransform( ...

随机推荐

  1. 飞机调度 Now or Later? LA 3211 (2-SAT问题)

    洛谷题目传送门 题目描述 有n架飞机需要着陆.每架飞机都可以选择“早着陆”和“晚着陆”两种方式之一,且必须选择一种.第i架飞机的早着陆时间为Ei,晚着陆时间为Li,不得在其他时间着陆.你的任务是为这些 ...

  2. [JavaWeb基础] 032.第三方插件pinyin4j的使用

    突然发现了一个比较新奇的插件,就是可以把我们输入的汉字,输出它所有的拼音的jar包.下面以代码的形式简单的介绍下这个插件 package com.babybus.sdteam.pinyin4j; im ...

  3. Java IO(十) BufferedInputStream 和 BufferedOutputStream

    Java IO(十)BufferedInputStream 和 BufferedOutputStream 一.BufferedInputStream 和 BufferedOutputStream (一 ...

  4. Unity 离线建造系统

    很多游戏,特别是养成类手游,都会有自己独特的建造系统,一个建造装置的状态循环或者说生命周期一般是这样的: 1.准备建造,设置各项资源的投入等 2.等待一段倒计时,正在建造中 3.建造结束,选择是否收取 ...

  5. 03_K近邻算法

    今天是2020年2月1日星期六,疫情延续,现在确诊人数达到了11821例,艰难困苦,玉汝于成,相信国家的力量!大家齐心协力干一件事,疫情会尽早结束的,武汉加油.前几天整理感知机算法的内容,发现写博客这 ...

  6. DM7的聚簇索引和非聚簇索引(cluster属性)

    早期的DM7或者DM8在创建带有主键的表时,默认会加上cluster属性:后期版本则全部为默认非cluster属性. 下面为显示的指定cluster属性: 1.创建主键的为聚集索引. create t ...

  7. Maven+JSP+SSM+Mysql实现的音乐网站

    项目简介 项目来源于:https://gitee.com/coder_ze/iMusic 本系统基于Maven+JSP+SSM+Mysql实现的音乐网站.主要实现的功能有音乐播放.下载.上传等几个模块 ...

  8. Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)

    ** 算法训练 字符串的展开 ** 题目: 在初赛普及组的"阅读程序写结果"的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于"d-h" ...

  9. java实现第五届蓝桥杯奇怪的分式

    奇怪的分式 题目描述 上小学的时候,小明经常自己发明新算法.一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批 ...

  10. 关于VMware虚拟机启动EFI/UEFI支持

    作为较新计算机和操作系统用于引导计算机的技术,可扩展固件接口 (EFI) 正在取代 BIOS.EFI 有时称为统一可扩展固件接口 (UEFI). 使用VMware创建虚拟机,默认还是会使用传统的BIO ...