『youcans 的 OpenCV 例程200篇 - 总目录』

【youcans 的 OpenCV 例程200篇】36. 直角坐标与极坐标的转换

函数 cv2.cartToPolar 用于将直角坐标(笛卡尔坐标)转换为极坐标,函数 cv2.polarToCart 用于将极坐标转换为直角坐标(笛卡尔坐标)。

圆形图案边缘上的文字经过及坐标变换后可以垂直的排列在新图像的边缘,便于对文字的识别和检测。

函数说明:

cv2.cartToPolar(x, y[, magnitude[, angle[, angleInDegrees]]]) → magnitude, angle
cv2.polarToCart(magnitude, angle[, x[, y[, angleInDegrees]]]) → x, y

函数 cv2.cartToPolar 实现将原点移动到变换中心后的直角坐标向极坐标的转换,输入参数为直角坐标系的横坐标、纵坐标,输出为极坐标系的向量值、角度值。

函数 cv2.polarToCart 实现将原点移动到变换中心后的极坐标向直角坐标的转换,输入参数为极坐标系的向量值、角度值,输出为直角坐标系的横坐标、纵坐标。

参数说明:

  • x, y:直角坐标系的横坐标、纵坐标,ndarray 多维数组,浮点型
  • magnitude, angle:极坐标系的向量值、角度值,ndarray 多维数组
  • angleInDegrees:弧度制/角度值选项,默认值 0 选择弧度制,1 选择角度制([0,360] )
  • 返回值 magnitude, angle:极坐标系的向量值、角度值,ndarray 多维数组,与输入的 x, y 具有相同的尺寸和数据类型
  • 返回值 x, y:直角坐标系的横坐标、纵坐标,ndarray 多维数组,与输入的 magnitude, angle 具有相同的尺寸和数据类型

注意事项:

  1. 极坐标与直角坐标的变换在数学上是可逆的,但实际变换时存在误差,角度计算精度约为 0.3度,坐标计算精度约为 1e-6。
  2. 直角坐标系以变换中心为圆心的同一个圆上的点,在极坐标系中显示为一条直线。因此,用极坐标变换可以实现圆形物体的图像修正。
  3. cv2.cartToPolar 中的可选项 magnitude, angle 可以用于指定变换中心的坐标,cv2.polarToCart 中的可选项 x, y 可以用于指定变换中心的坐标。

基本例程:1.45 直角坐标转换为极坐标

    # 1.45 直角坐标转换为极坐标x = np.float32([0,1,2, 0,1,2, 0,1,2]) -1y = np.float32([0,0,0, 1,1,1, 2,2,2]) -1n = np.arange(9)r, theta = cv2.cartToPolar(x, y, angleInDegrees=True)xr,yr = cv2.polarToCart(r, theta, angleInDegrees=1)print(xr,yr)plt.figure(figsize=(9,5))plt.subplot(121), plt.title("Cartesian coordinate"), plt.plot(x, y, 'o')for i, txt in enumerate(n):plt.annotate(txt, (x[i], y[i]))plt.subplot(122), plt.title("Polar coordinate"), plt.plot(r, theta, 'o')for i, txt in enumerate(n):plt.annotate(txt, (r[i], theta[i]))plt.show()

扩展例程:1.46 极坐标系中的圆形图像修正

    # 1.46 极坐标系中的圆形图像修正img = cv2.imread("../images/imgC3.jpg")  # 读取彩色图像(BGR)h, w = img.shape[:2]  # 图片的高度和宽度cx, cy = int(w/2), int(h/2)  # 以图像中心点作为变换中心maxR = max(cx, cy)  # 最大变换半径imgPolar = cv2.linearPolar(img, (cx,cy), maxR, cv2.INTER_LINEAR)imgPR = cv2.rotate(imgPolar, cv2.ROTATE_90_COUNTERCLOCKWISE)plt.figure(figsize=(10,6))plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title("Original"), plt.axis('off')plt.subplot(122), plt.imshow(cv2.cvtColor(imgPR, cv2.COLOR_BGR2RGB)), plt.title("PolarTrans"), plt.axis('off')plt.show()

通过极坐标和直角坐标的对应关系,将圆环图像转换为矩形图像,可以对圆形图像进行修正。

(本节完)


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18

【第3章:图像的几何变换】

33. 图像的复合变换
34. 图像的投影变换

【OpenCV 例程200篇】36. 直角坐标与极坐标转换(cv2.polarToCart)相关推荐

  1. 【OpenCV 例程200篇】31. 图像金字塔(cv2.pyrDown)

    [OpenCV 例程200篇]31. 图像金字塔(cv2.pyrDown) 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更 ...

  2. 【OpenCV 例程200篇】36. 直角坐标与极坐标的转换

    [OpenCV 例程200篇]36. 直角坐标与极坐标的转换 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 函数 c ...

  3. 【youcans 的 OpenCV 例程200篇】158. 阈值处理之固定阈值法

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  4. 【youcans 的 OpenCV 例程200篇】157. 霍夫变换直线检测

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  5. 【youcans 的 OpenCV 例程200篇】152. 边缘检测之 LoG 算子

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  6. 【youcans 的 OpenCV 例程200篇】150. 边缘检测梯度算子

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  7. 【youcans 的 OpenCV 例程200篇】149. 图像分割之边缘模型

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  8. 【youcans 的 OpenCV 例程200篇】147. 图像分割之孤立点检测

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  9. 【youcans 的 OpenCV 例程200篇】144. 基于灰度形态学的纹理分割

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

  10. 【youcans 的 OpenCV 例程200篇】135. 形态学重建之粒度测定

    欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程20 ...

最新文章

  1. java 品尝饮料_那些年我喝过的饮料
  2. 关于CSS属性display:none和visible:hidden的区别
  3. 洛谷4072 SDOI2016征途 (斜率优化+dp)
  4. sizeof(函数名)=?
  5. mysql 太多字段 排除某一列_Atitit 数据库排除某一列 字段 显示
  6. 华为程序员写代码十几年没有被拿去“祭天”,靠的是这5条口诀
  7. 看到一个RISC-V指令集的评论
  8. 常识——CE修改器使用
  9. s7-1200PLC和第三方扫码枪走以太网通信
  10. 基于canvas的图片反色处理
  11. 跨语言词向量笔记2. 跨语言词向量表示简史
  12. 基于MATLAB 的X-CT图像重建计算机仿真实验研究实验
  13. 人类迁徙计划 (feat.译者补完篇)
  14. ARP断网攻击(详细教程)
  15. 零基础怎么学习平面设计
  16. 如何建立英文字符的哈希表
  17. Java如何控制生成pdf的大小_如何使用pdfbox或其他Java库减小合并的PDF / A-1b文件的大小...
  18. 【kafka专栏】安全认证之SCRAM动态用户管理的方式
  19. 12-11 网易实习一面
  20. 人体运动学非线性分析(一)—熵特征

热门文章

  1. mysql 插入秒_教你88秒插入1000万条数据到mysql数据库表,IG牛逼
  2. 网络安全行业一览众山小,你家公司上榜了吗
  3. 5.29今日黄金最新行情走势分析及多空交易策略
  4. pipeline 语法 Groovy
  5. DownAlbum:Chrome的pinterest批量下载插件
  6. Fedora 17安装google输入法和云拼音, 安装快捷方式
  7. .DS_Store文件
  8. datepicker 限制只能选择7天的两种方式
  9. 【朝花夕拾】Android跨进程通信总结篇
  10. PSINS运动轨迹与惯性器件信息生成仿真