1. initUndistortRectifyMap函数
    函数说明:
    这个函数使用于计算无畸变和修正转换关系。
    函数原型:
    C++:
    void initUndistortRectifyMap( InputArray cameraMatrix, InputArray distCoeffs,
    InputArray R, InputArray newCameraMatrix, Size size, int m1type, OutputArray map1, OutputArray map2 );
    python:
    map1, map2=cv.initUndistortRectifyMap(cameraMatrix, distCoeffs, R, newCameraMatrix, size, m1type[, map1[, map2]])

    参数说明:
    cameraMatrix——输入的摄像头内参数矩阵(3X3矩阵)
    distCoeffs——输入的摄像头畸变系数矩阵(5X1矩阵)
    R——输入的第一和第二摄像头坐标系之间的旋转矩阵
    newCameraMatrix——输入的校正后的3X3摄像机矩阵
    size——摄像头采集的无失真图像尺寸
    m1type——map1的数据类型,可以是CV_32FC1或CV_16SC2
    map1——输出的X坐标重映射参数
    map2——输出的Y坐标重映射参数

  2. remap()函数
    函数说明:一幅图像中某位置的像素放置到另一个图片指定位置。
    函数原型:
    C++:
    void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2,
    int interpolation, intborderMode = BORDER_CONSTANT,
    const Scalar& borderValue = Scalar())
    python:
    dst = cv.remap(src, map1, map2, intermap2polation, dst=None, borderMode=None, borderValue=None)
    cv.remap(src, map1, map2, interpolation[, dst[, borderMode[, borderValue]]])
    参数说明:
    src——输入图像,即原图像,需要单通道8位或者浮点类型的图像
    dst(c++)——输出图像,即目标图像,需和原图形一样的尺寸和类型
    map1——它有两种可能表示的对象:(1)表示点(x,y)的第一个映射;(2)表示CV_16SC2,CV_32FC1等
    map2——有两种可能表示的对象:(1)若map1表示点(x,y)时,这个参数不代表任何值;(2)表示 CV_16UC1,CV_32FC1类型的Y值
    intermap2polation——插值方式,有四中插值方式:
    (1)INTER_NEAREST——最近邻插值
    (2)INTER_LINEAR——双线性插值(默认)
    (3)INTER_CUBIC——双三样条插值(默认)
    (4)INTER_LANCZOS4——lanczos插值(默认)

    intborderMode——边界模式,默认BORDER_CONSTANT
    borderValue——边界颜色,默认Scalar()黑色

程序实现:
#摄像头内参矩阵参数
self.intrinsic = np.array([[5.8629461226441333e+02, 0., 3.2307824498677365e+02],
[0., 5.8580366873441926e+02, 2.4267926102121419e+02],
[0., 0., 1.]])
#摄像头畸变矩阵参数
self.distortion_coeff = np.array([[-4.3728820025053183e-01], [2.4851525131136012e-01],
[-7.7560743133785464e-04], [-6.2320226939478036e-04],
[-8.3503368627783472e-02]])

map1, map2 = cv2.initUndistortRectifyMap(self.intrinsic, self.distortion_coeff, None, None,
(frame.shape[1], frame.shape[0]), cv2.CV_32FC1)
frame = cv2.remap(frame, map1, map2, cv2.INTER_LINEAR)
最后:
参考链接:https://docs.opencv.org/master/index.html

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐