【图像畸变校正】

接上篇文章:【鱼眼+普通相机】相机标定

附代码:

方法一:

使用cv2.undistort

"""
    Create May 11, 2024
    @author Wang Jiajun
"""

import cv2
import numpy as np


def correct(img,camera_file='E:/calib_yaml/ship_calib.yaml'):
    """
    矫正图像,去除畸变
        img: 输入图像
        camera_file: 相机参数文件
        return: 矫正后的图像
    """
    fs = cv2.FileStorage(camera_file, cv2.FILE_STORAGE_READ)
    camera_matrix = fs.getNode("camera_matrix").mat()
    dist_coeffs = fs.getNode("dist_coeffs").mat()  # 畸变参数--顺序很重要!!!:k1,k2,p1,p2,k3
    resolution = fs.getNode("resolution").mat()  # 图像分辨率
    imSize = (resolution[0][0], resolution[1][0])
    fs.release()

    # 矫正图像
    img_distort = cv2.undistort(img, np.array(camera_matrix), np.array(dist_coeffs))
    return img_distort 


if __name__ == '__main__':
    camera_file = 'E:/calib_yaml/ship_calib.yaml'
    video = cv2.VideoCapture(0)
    while True:
        ret, img = video.read()
        # 3. 矫正图像
        img = cv2.resize(img, (640, 480))
        cv2.putText(img, "Press q to exit", (20, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 200, 0), 2)
        img_distort = cv2.correct(img, camera_file )
        # 4. 显示原图和矫正后的图像
        cv2.imshow('img_original', img)
        cv2.imshow('img_distort', img_distort)
        key = cv2.waitKey(1)
        # 5. 按q退出
        if key & 0xFF == ord('q'):
            break
    # 6. 关闭窗口
    video.release()
    cv2.destroyAllWindows()

方法二:

使用cv2.initUndistortRectifyMap建立映射关系,就不用每次读取内参了,速度更快。

"""
    Create May 11, 2024
    @author Wang Jiajun
"""

import cv2
import numpy as np


def correct(camera_file='E:/calib_yaml/ship_calib.yaml'):
    """
    矫正图像,去除畸变
        img: 输入图像
        camera_file: 相机参数文件
        return: 矫正后的图像
    """
    fs = cv2.FileStorage(camera_file, cv2.FILE_STORAGE_READ)
    camera_matrix = fs.getNode("camera_matrix").mat()
    dist_coeffs = fs.getNode("dist_coeffs").mat()  # 畸变参数--顺序很重要!!!:k1,k2,p1,p2,k3
    resolution = fs.getNode("resolution").mat()  # 图像分辨率
    imSize = (resolution[0][0], resolution[1][0])
    fs.release()

    # 矫正图像
    new_camera_matrix, roi = cv2.getOptimalNewCameraMatrix(np.array(camera_matrix), np.array(dist_coeffs),
                                                           imSize, 0,
                                                           imSize)
    map1, map2 = cv2.initUndistortRectifyMap(np.array(camera_matrix), np.array(dist_coeffs), None, new_camera_matrix,
                                             imSize, cv2.CV_32FC1)
    # img_distort = cv2.undistort(img, np.array(camera_matrix), np.array(dist_coeffs))
    return map1, map2


if __name__ == '__main__':
    camera_file = 'E:/calib_yaml/ship_calib.yaml'
    map1, map2 = correct(camera_file)
    video = cv2.VideoCapture(0)
    while True:
        ret, img = video.read()
        # 3. 矫正图像
        img = cv2.resize(img, (640, 480))
        cv2.putText(img, "Press q to exit", (20, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 200, 0), 2)
        img_distort = cv2.remap(img, map1, map2, cv2.INTER_LINEAR)
        # 4. 显示原图和矫正后的图像
        cv2.imshow('img_original', img)
        cv2.imshow('img_distort', img_distort)
        key = cv2.waitKey(1)
        # 5. 按q退出
        if key & 0xFF == ord('q'):
            break
    # 6. 关闭窗口
    video.release()
    cv2.destroyAllWindows()

相关推荐

  1. 图像畸变校正

    2024-05-12 06:34:06       36 阅读
  2. matlab去图像畸变

    2024-05-12 06:34:06       39 阅读
  3. 【Python图像处理篇】opencv中的去畸变

    2024-05-12 06:34:06       35 阅读
  4. 摄像头校准之白平衡&畸变&坏点

    2024-05-12 06:34:06       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-12 06:34:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-12 06:34:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-12 06:34:06       82 阅读
  4. Python语言-面向对象

    2024-05-12 06:34:06       91 阅读

热门阅读

  1. ES 7.0.0 升级 7.1.0,离线升级

    2024-05-12 06:34:06       27 阅读
  2. 等保测评安全物理环境测评讲解

    2024-05-12 06:34:06       29 阅读
  3. SpringBoot集成Minio

    2024-05-12 06:34:06       34 阅读
  4. 使用torch.nn.ModuleList构建神经网络

    2024-05-12 06:34:06       38 阅读
  5. 现代R语言【Tidyverse、Tidymodel】的机器学习

    2024-05-12 06:34:06       29 阅读
  6. 在windows环境中利用docker-desk运行RAGFlow

    2024-05-12 06:34:06       29 阅读
  7. 蓝桥杯-带分数

    2024-05-12 06:34:06       27 阅读
  8. 蓝桥杯第246题——矩阵计数

    2024-05-12 06:34:06       27 阅读
  9. 零基础掌握Kafka

    2024-05-12 06:34:06       32 阅读
  10. wifi无线使用adb

    2024-05-12 06:34:06       27 阅读