教程 | OpenCV4中的极坐标变换

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

教程 | OpenCV4中的极坐标变换_第1张图片

图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 
2.  #include 
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.  }

教程 | OpenCV4中的极坐标变换_第2张图片

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

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

教程 | OpenCV4中的极坐标变换_第3张图片

教程 | OpenCV4中的极坐标变换_第4张图片

你可能感兴趣的:(opencv,计算机视觉,python,人工智能,图像识别)