opencv 鱼眼图像的矫正(动态参数调整)

一:棋盘校准参数说明(内参)

棋盘校准的方法及代码很多,参见其他连接

1:内参矩阵

2:畸变系数

针对鱼眼相机此处是4个参数,在其校准代码中也可以知道,其通常的定义如下:

       data.camera_mat = np.eye(3, 3)
       data.dist_coeff = np.zeros((4, 1))

二:基于生成的参数D和K进行调整

直接上代码,

import os
import numpy as np
import cv2
#下面的值是来自棋盘格校准后的内参矩阵K
initial_camera_matrix = np.array([[389.3455401867884, 0.0, 630.3678577531273],
                                  [0.0, 388.5686773894828, 361.167452606629],
                                  [0.0, 0.0, 1.0]])
                     
camera_mat = np.array([[302.116935,0.0,521.926531],
                       [  0.0, 358.512097, 363.652721],
                       [  0.0, 0.0,     1.0      ]])

#下面的值是来自棋盘格校准后的D
dist_coeff = np.array([[0.05648235312901486],[-0.024826520405491565],[-0.002416551582982325],[0.0010672440368159684]])

def adjust_parameters(x):
# 获取当前滑动条的值
    fx = cv2.getTrackbarPos('fx', 'Parameters')/ 100.0 
    fy = cv2.getTrackbarPos('fy', 'Parameters')/ 100.0 
    cx = cv2.getTrackbarPos('cx', 'Parameters')/ 100.0 
    cy = cv2.getTrackbarPos('cy', 'Parameters')/ 100.0 
    k1 = cv2.getTrackbarPos('k1', 'Parameters') / 2000000  # 调整范围以便于滑动条控制
    k2 = cv2.getTrackbarPos('k2', 'Parameters') / 2000000
    p1 = cv2.getTrackbarPos('p1', 'Parameters') / 2000000
    p2 = cv2.getTrackbarPos('p2', 'Parameters') / 2000000

# 更新相机矩阵和畸变系数
    new_camera_matrix = np.array([[fx, 0.0, cx],
                                  [0.0, fy, cy],
                                  [0.0, 0.0, 1.0]])
    new_distortion_coeff = np.array([[k1], [-k2], [-p1], [p2]])

    map1, map2 = cv2.fisheye.initUndistortRectifyMap(
                initial_camera_matrix, new_distortion_coeff, np.eye(3, 3), new_camera_matrix, 
                (args.width * args.sizescale, args.height * args.sizescale), cv2.CV_16SC2) 

  
    img = np.load("./calibrate_img/img_cam5.npy")
    print(new_camera_matrix)
    print(new_distortion_coeff)
    undistort_img = cv2.remap(img, map1, map2, cv2.INTER_LINEAR)
    undistort_img=cv2.resize(undistort_img,(img.shape[1],img.shape[0]))

    cv2.imshow("undistort_img",undistort_img)

    
    cv2.imshow("src_img",img)




def main():

    cv2.namedWindow('Parameters')
    
# 添加相机矩阵的滑动条
    cv2.createTrackbar('fx', 'Parameters', int(camera_mat[0, 0]* 10000), 90*100000, adjust_parameters)
    cv2.createTrackbar('fy', 'Parameters', int(camera_mat[1, 1]* 10000), 90*100000, adjust_parameters)
    cv2.createTrackbar('cx', 'Parameters', int(camera_mat[0, 2]* 10000), 90*1000000, adjust_parameters)
    cv2.createTrackbar('cy', 'Parameters', int(camera_mat[1, 2]* 10000), 90*100000, adjust_parameters)
    
# 添加畸变系数的滑动条
    cv2.createTrackbar('k1', 'Parameters', int(dist_coeff[0, 0] * 100000), 4000000, adjust_parameters)
    cv2.createTrackbar('k2', 'Parameters', int(dist_coeff[1, 0] * 100000), 4000000, adjust_parameters)
    cv2.createTrackbar('p1', 'Parameters', int(dist_coeff[2, 0] * 100000), 4000000, adjust_parameters)
    cv2.createTrackbar('p2', 'Parameters', int(dist_coeff[3, 0] * 100000), 4000000, adjust_parameters)
    while True:
        key = cv2.waitKey(1) & 0xFF
        if key == ord('q'):
            break

    cv2.destroyAllWindows()  
    
if __name__ == '__main__':
    main()    
相关推荐
YRr YRr4 分钟前
深度学习:循环神经网络(RNN)详解
人工智能·rnn·深度学习
sp_fyf_202415 分钟前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
多吃轻食20 分钟前
大模型微调技术 --> 脉络
人工智能·深度学习·神经网络·自然语言处理·embedding
北京搜维尔科技有限公司1 小时前
搜维尔科技:【应用】Xsens在荷兰车辆管理局人体工程学评估中的应用
人工智能·安全
说私域1 小时前
基于开源 AI 智能名片 S2B2C 商城小程序的视频号交易小程序优化研究
人工智能·小程序·零售
YRr YRr1 小时前
深度学习:Transformer Decoder详解
人工智能·深度学习·transformer
知来者逆1 小时前
研究大语言模型在心理保健智能顾问的有效性和挑战
人工智能·神经网络·机器学习·语言模型·自然语言处理
云起无垠1 小时前
技术分享 | 大语言模型赋能软件测试:开启智能软件安全新时代
人工智能·安全·语言模型
老艾的AI世界2 小时前
新一代AI换脸更自然,DeepLiveCam下载介绍(可直播)
图像处理·人工智能·深度学习·神经网络·目标检测·机器学习·ai换脸·视频换脸·直播换脸·图片换脸
翔云API2 小时前
PHP静默活体识别API接口应用场景与集成方案
人工智能