python使用opencv(cv2)的undistortPoints()/undistort()函数对像素坐标/图像去畸变

您所在的位置:网站首页 esp8266-12f原理图 python使用opencv(cv2)的undistortPoints()/undistort()函数对像素坐标/图像去畸变

python使用opencv(cv2)的undistortPoints()/undistort()函数对像素坐标/图像去畸变

2023-04-14 20:41| 来源: 网络整理| 查看: 265

1 cv2的安装

  python下的opencv叫cv2,但是安装cv2并不是直接pip install cv2,而是:

pip install opencv-python

  安装完成后,就可以使用啦。   

2 像素坐标去畸变

  对像素坐标去畸变要使用到cv2的undistortPoints()函数,其官方文档点击这里查看。如下图所示:   其中涉及的参数包括:

src:图像的像素坐标点集合,类型是np.ndarray,维度可以是N×1×2或者1×N×2 dst:输出的去畸变结果,类型是np.ndarray,维度是N×1×2 cameraMatrix:如官方文档所示,就是一个3×3的相机内参矩阵K,类型为np.ndarray distCoeffs:畸变参数,排列顺序为:k1,k2,p1,p2[,k3[,k4,k5,k6[,s1,s2,s3,s4[,τx,τy]]]],其长度可以是4、5、8、12或14,类型为np.float32或者np.float64(注意,这里不能是np.ndarray,否则报错) R:双目相机的校准才要用到,单目直接默认为单位阵即可 P:默认是单位阵,这样输出的结果为归一化坐标点,数值很小(0.几的级别)。如果要获得去畸变后的图像平面坐标,需要设置为相机的内参K

  虽然上述官方文档里undistortPoints()函数的参数排列顺序是:src, dst, cameraMatrix, distCoeffs, R, P。但是实际上,其参数排列顺序是:src, cameraMatrix, distCoeffs[, dst[, R[, P]]],其中[ ]内的参数为可选参数。接收输出的数组dst可以直接通过等号进行赋值,而不一定需要提前建好然后丢进函数中。这些信息在上图的函数描述之后有个python行里有介绍,或者可以通过在python命令行下,输入help(cv2.undistortPoints)查看,如下图所示:   好了,函数使用方法已经介绍差不多了,下面给一个完整的使用示例:

import numpy as np import cv2 as cv undistort_pts = cv.undistortPoints(pts, K, distCoeffs, P=K)

  其中,pts是输入src,K是内参cameraMatrix,distCoeffs是畸变参数,最后的P=K是指定的相机矩阵,这样将会获得去畸变后的像素坐标点。需要特别指定是参数P,是因为该参数在函数接口中是排在最后一位的可选参数,而在它之前还有dst和R两个参数,我们都没有设置,所以我们需要指定参数名来进行赋值。如果没有指定P,那么将输出归一化坐标点(数值很小,为0.几的级别)。undistort_pts是获取到的输出结果。   

3 对图像去畸变

  图像去畸变和像素坐标去畸变大同小异,仅有输入输出的差别。对图像去畸变需要使用到undistort()函数,官方文档的描述如下:   参数的具体类型含义就不多介绍了,和上面是一样的,只是其输入输出变成了图像矩阵。其中这个新的newCameraMatrix参数,其默认是和cameraMatrix一样的,如果有平移缩放需要的话,则可以自己定义输入,与像素坐标去畸变的参数P一样。下面是一个示例:

import numpy as np import cv2 as cv K = np.zeros((3, 3)) K[0, 0] = 1201.58 K[1, 1] = 1201.72 K[0, 2] = 1019.59 K[1, 2] = 807.568 K[2, 2] = 1 distCoeffs = np.float32([-0.0911113, 0.0852054, 1.79509e-06, 0.000242446]) img = cv.imread('1.png') img_undistored = cv.undistort(img, K, distCoeffs) cv.imwrite('11.png', img_undistored)

  去畸变前后的图像如下图所示:

来源:zeeq_

您可能感兴趣的内容: openCV第二篇 Opencv实现素描的坤坤打篮球 ERROR: Could not build wheels for opencv-python which use PEP 517 and cannot be installed directly OpenCV-Python实战(2)——图像与视频文件的处理 小啾带你开天眼 之 开启py-OpenCV摄像头及视频处理【Python-Open_CV系列(十二)】


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3