【从零学习OpenCV 4】极坐标变换

重磅干货,第一时间送达

经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。

极坐标变换就是将图像在直角坐标系与极坐标系中互相变换,形式如图3-26所示,它可以将一圆形图像变换成一个矩形图像,常用于处理钟表、圆盘等图像。圆形图案边缘上的文字经过及坐标变换后可以垂直的排列在新图像的边缘,便于对文字的识别和检测。

图3-26 极坐标变换示意图

OpenCV 4中提供了warpPolar()函数用于实现图像的极坐标变换,该函数的函数原型在代码清单3-38中给出。

代码清单3-38 warpPolar()函数原型
1.  void cv::warpPolar(InputArray src,
2.                         OutputArray dst,
3.                         Size dsize,
4.                         Point2f center,
5.                         double  maxRadius,
6.                         int  flags
7.                         )
  • src:原图像,可以是灰度图像或者彩色图像。

  • dst:极坐标变换后输出图像,与原图像具有相同的数据类型和通道数。

  • dsize:目标图像大小。

  • center:极坐标变换时极坐标的原点坐标。

  • maxRadius:变换时边界圆的半径,它也决定了逆变换时的比例参数。

  • flags: 插值方法与极坐标映射方法标志,插值方法在表3-3中给出,极坐标映射方法在表3-7给出,两个方法之间通过“+”或者“|”号进行连接。

该函数实现了图像极坐标变换和半对数极坐标变换。函数第一个参数是需要进行极坐标变换的原始图像,该图像可以是灰度图像也可以是彩色图像。第二个参数是变换后的输出图像,与输入图像具有相同的数据类型和通道数。第三个参数是变换后图像的大小。第四个参数是极坐标变换时极坐标原点在原图像中的位置,该参数同样适用于逆变换中。第五个参数是变换时边界圆的半径,它也决定了逆变换时的比例参数。最后一个参数是变换方法的选择标志,插值方法在表3-3中给出,极坐标映射方法在表3-7给出,两个方法之间通过“+”或者“|”号进行连接。

表3-7 warpPolar()函数极坐标映射方法标志

标志参数

作用

WARP_POLAR_LINEAR

极坐标变换

WARP_POLAR_LOG

半对数极坐标变换

WARP_INVERSE_MAP

逆变换

该函数可以对图像进行极坐标正变换也可以进行逆变换,关键在于最后一个参数如何选择。为了了解图像极坐标变换的功能以及相关函数的使用,在代码清单3-39给出了对表盘图像进行极坐标正变换和逆变换的示例程序。程序中选取表盘的中心作为极坐标的原点,变换的结果在图3-27给出。

代码清单3-39 mywarpPolar.cpp图像极坐标变换
1.  #include <opencv2\opencv.hpp>
2.  #include <iostream>
3.  
4.  using namespace std;
5.  using namespace cv;
6.  
7.  int main()
8. {
9.    Mat img = imread("dial.png");
10.    if (!img.data)
11.    {
12.      cout << "请检查图像文件名称是否正确" << endl;
13.      return -1;
14.    }
15.  
16.    Mat img1, img2;
17.    Point2f center = Point2f(img.cols / 2, img.rows/2); //极坐标在图像中的原点
18.    //正极坐标变换
19.    warpPolar(img, img1, Size(300,600), center, center.x,
20.                               INTER_LINEAR + WARP_POLAR_LINEAR);
21.    //逆极坐标变换
22.    warpPolar(img1, img2, Size(img.rows,img.cols), center, center.x,
23.                          INTER_LINEAR + WARP_POLAR_LINEAR + WARP_INVERSE_MAP);
24.  
25.    imshow("原表盘图", img);
26.    imshow("表盘极坐标变换结果", img1);
27.    imshow("逆变换结果", img2);
28.    waitKey(0);
29.    return 0;
30.  }

图3-27 mywarpPolar.cpp程序中极坐标正变换和逆变换的结果

(0)

相关推荐

  • python+opencv图像处理(十一)

    图像镜像 图像的镜像指的是将图像以某条线为中心进行镜像对换. 图像的镜像根据翻转的方向可分为水平镜像翻转.垂直镜像翻转和对角镜像翻转3种. 水平镜像翻转指的是将图像以y轴为中心进行左右镜像对换. 垂直 ...

  • Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略

    Py之cv2:cv2库(OpenCV,opencv-python)的简介.安装.使用方法(常见函数.方法等)最强详细攻略 相关文章: Py之cv2:cv2库(OpenCV)的简介.安装.使用方法(常见 ...

  • OpenCV-Python学习教程.2

    如果你用Linux得设备,可能会用到这里来看有没有设备被安全挂载.因为没有一个图形化的页面来方便的查看. 子Linux不是太好使 # 获取视频帧的宽w = fcap.get(cv2.CAP_PROP_ ...

  • python+opencv图像处理(十)

    图像旋转 本篇主要利用opencv的转换函数warpAffine实现图像的平移和旋转. 1.图像旋转 图像旋转即是根据某个中心点进行旋转. 要进行旋转,要找到中心点,要知道旋转角度,opencv提供了 ...

  • 【从零学习OpenCV 4】图像距离变换

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】深度神经网络应用实例

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】图像修复

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】分割图像——Mean-Shift分割算法

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】分割图像——Grabcut图像分割

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】分割图像——分水岭法

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】QR二维码检测

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】图像矩的计算与应用

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<从零学习OpenCV 4>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...

  • 【从零学习OpenCV 4】轮廓外接多边形

    重磅干货,第一时间送达 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍<OpenCV 4开发详解>.为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通 ...