opencv C++极坐标变换
#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++极坐标变换的更多相关文章
- OpenCV图像变换二 投影变换与极坐标变换实现圆形图像修正
投影变换 在放射变换中,物体是在二维空间中变换的.如果物体在三维空间中发生了旋转,那么这种变换就成为投影变换,在投影变换中就会出现阴影或者遮挡,我们可以运用二维投影对三维投影变换进行模块化,来处理阴影 ...
- Photoshop和Halcon中的极坐标变换
极坐标想必学过高中数学的人都听过,一般的坐标系中用(x, y)值来描述一个点的位置,而在极坐标系中,则使用到原点的距离ρ和夹角θ来描述该点的位置. 我很早就接触了Photoshop,知道Photosh ...
- Python: PS 滤镜-- 极坐标变换到平面坐标
本文用 Python 实现 PS 中的一种滤镜 极坐标变换到平面坐标,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/de ...
- OpenCV——PS 滤镜算法之极坐标变换到平面坐标
// define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...
- opencv之形态变换
形态变换 在opencv之膨胀与腐蚀中介绍了Dilation/Erosion的原理.建议先读这一篇,搞懂原理. 这样就可以很轻松地理解为什么本文的这些形态变换可以取得相应的效果. 基于此,我们可以组合 ...
- OpenCV仿射变换+投射变换+单应性矩阵
本来想用单应性求解小规模运动的物体的位移,但是后来发现即使是很微小的位移也会带来超级大的误差甚至错误求解,看起来这个方法各种行不通,还是要匹配知道深度了以后才能从三维仿射变换来入手了,纠结~ esti ...
- PS 滤镜——极坐标变换到平面坐标
%%% 极坐标到平面坐标 clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorith ...
- opencv::基于距离变换与分水岭的图像分割
什么是图像分割 图像分割(Image Segmentation)是图像处理最重要的处理手段之一 图像分割的目标是将图像中像素根据一定的规则分为若干(N)个cluster集合,每个集合包含一类像素. 根 ...
- opencv 仿射变换 投射变换, 单应性矩阵
仿射 estimateRigidTransform():计算多个二维点对或者图像之间的最优仿射变换矩阵 (2行x3列),H可以是部分自由度,比如各向一致的切变. getAffineTransform( ...
随机推荐
- 关于Tensorflow基于Windows安装那些事儿
声明:代码及博客小白一枚,如有错误,感谢指正~~ 众所周知,摘抄来温习一遍: Tensorflow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes) ...
- Apache Hudi在医疗大数据中的应用
本篇文章主要介绍Hudi在医疗大数据中的应用,主要分为5个部分进行介绍:1. 建设背景,2. 为什么选择Hudi,3. Hudi数据同步,4. 存储类型选择及查询优化,5. 未来发展与思考. 1. 建 ...
- 报错:The server cannot be started because one or more of the ports are invalid. Open the server editor and correct the invalid ports.
今天重装eclipse和Tomcat,启动时候报标题错“The server cannot be started because one or more of the ports are invali ...
- 【项目】关于TeenCode第二代评测机的技术分析
晚上睡不着觉,仔细研读了洛谷的第四代评测机技术分析后,突然发现自己写的TeenCode评测机竟然有这么多地方可以改进,这不得不让我诞生了实现第二代TeenCode评测机的想法.[第一代评测机挺可怜的, ...
- Rocket - interrupts - Crossing
https://mp.weixin.qq.com/s/nSX4prXFb4K5GSUhPtOUCg 简单介绍Crossing的实现. 1. IntXing 这是一个LazyModule: 1) 参数 ...
- 分享两个常用的rem布局方式
关于rem 这种技术需要一个参考点,一般都是以<body>的“font-size”为基准. 比如我们设置body,html的字体大小为10px:那么1rem就是10px, 这样一来,我们设 ...
- Java实现 蓝桥杯VIP 算法训练 接水问题
题目描述 有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小. 输入输出格式 输入格式: 输入文件共两行,第一行为n:第二行分别 ...
- Java实现第八届蓝桥杯图形排版
标题:图形排版 小明需要在一篇文档中加入 N 张图片,其中第 i 张图片的宽度是 Wi,高度是 Hi. 假设纸张的宽度是 M,小明使用的文档编辑工具会用以下方式对图片进行自动排版: 1. 该工具会按照 ...
- java实现第四届蓝桥杯三部排序
三部排序 题目描述 一般的排序有许多经典算法,如快速排序.希尔排序等. 但实际应用时,经常会或多或少有一些特殊的要求.我们没必要套用那些经典算法,可以根据实际情况建立更好的解法. 比如,对一个整型数组 ...
- pi-star 升级固件命令
单天线热点: sudo pistar-mmdvmhshatflash hs_hat 双天线热点: sudo pistar-mmdvmhshatflash hs_dual_hat 命令: wget ht ...