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( ...
随机推荐
- 跟着拉大锯大神学Android——网络编程中运行后台服务器端口占用问题
拉大锯网页地址:https://www.sunofbeach.net/u/1153952789488054272 跟着拉大锯大神学Android,在学到网络编程时,使用了大神搭建的用于学习的后台服务器 ...
- sql语句中的删除操作
drop: drop table tb; 删除内容和定义,释放空间.简单来说就是把整个表去掉.以后不能再新增数据,除非新增一个表. truncate: truncate table tb; 删除内容. ...
- [PHP学习教程 - 文件]001.高速读写大数据“二进制”文件,不必申请大内存(Byte Block)
引言:读写大“二进制”文件,不必申请很大内存(fopen.fread.fwrite.fclose)!做到开源节流,提高速度! 每天告诉自己一次,『我真的很不错』.... 加速读写大文件,在实际工作过程 ...
- 深入浅出Spring MVC
摘要 本文旨在详细分析SpringMVC工作原理以及作为开发者如何基于SpringMVC做扩展.因为SpringMVC分析的文章比较多,所以本文重点讲解如何利用SpringMVC的扩展点实现我们的需求 ...
- Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)
1.简介 上一篇中宏哥已经将其的理论知识介绍了一下,这一篇宏哥就带着大家一步一步的把上一篇介绍的理论知识实践一下,然后再说一下如何创建高级web测试计划. 2.网络计划实战 通过上一篇的学习,宏哥将其 ...
- ES6-for...of与for...in
1.includes 数组是否包含某个东西 <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- Rocket - devices - TLBusBypass
https://mp.weixin.qq.com/s/WviVHxlZvsNm8mea2VpfTw 简单介绍TLBusBypass的实现. 1. TLBypassNode TLBypassNode定义 ...
- Java实现 LeetCode 563 二叉树的坡度(又是一个遍历树)
563. 二叉树的坡度 给定一个二叉树,计算整个树的坡度. 一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值.空结点的的坡度是0. 整个树的坡度就是其所有节点的坡度之和. ...
- Java实现 洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes
import java.util.Scanner; public class Main { private static Scanner cin; public static void main(St ...
- java实现第五届蓝桥杯猜字母
猜字母 题目描述 把abcd-s共19个字母组成的序列重复拼接106次,得到长度为2014的串. 接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母. 得到的新串再进行删除 ...