当前位置: 首页 > news >正文

计算鱼眼相机的内参矩阵和畸变系数方法

鱼眼镜头标定的Python代码,它使用OpenCV库来处理图像并计算相机的内参矩阵和畸变系数。

import cv2
assert cv2.__version__[0] == '4', 'The fisheye module requires opencv version >= 4.0.0'
import numpy as np
import glob# 设置棋盘格角点的数量
chessboard_size = (9, 6)  # 棋盘格内角点的行列数,根据实际情况修改
subpix_criteria = (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# 准备物体点数据
objp = np.zeros((1, chessboard_size[0]*chessboard_size[1], 3), np.float32)
objp[0,:,:2] = np.mgrid[0:chessboard_size[0], 0:chessboard_size[1]].T.reshape(-1, 2)# 用于存储所有图像的物体点和图像点
objpoints = []  # 3D点
imgpoints = []  # 2D点# 加载标定图像
images = glob.glob('calibration_images/*.jpg')  # 替换为你的标定图像路径for fname in images:img = cv2.imread(fname)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 查找棋盘格的角点#ret, corners = cv2.findChessboardCorners(gray, chessboard_size, None)ret, corners = cv2.findChessboardCorners(gray, chessboard_size, cv2.CALIB_CB_ADAPTIVE_THRESH+cv2.CALIB_CB_FAST_CHECK+cv2.CALIB_CB_NORMALIZE_IMAGE)# 如果找到足够的角点,则添加到点集中if ret:objpoints.append(objp)cv2.cornerSubPix(gray,corners,(3,3),(-1,-1),subpix_criteria)imgpoints.append(corners)# 绘制角点并显示img = cv2.drawChessboardCorners(img, chessboard_size, corners, ret)cv2.imshow('img', img)cv2.waitKey(100)cv2.destroyAllWindows()# 使用 OpenCV 的 fisheye 模块标进行定
N_OK = len(objpoints)
K = np.zeros((3, 3))
D = np.zeros((4, 1))
rvecs = [np.zeros((1, 1, 3), dtype=np.float64) for i in range(N_OK)]
tvecs = [np.zeros((1, 1, 3), dtype=np.float64) for i in range(N_OK)]rms, _, _, _, _ = cv2.fisheye.calibrate(objpoints,imgpoints,gray.shape[::-1],K,D,rvecs,tvecs,cv2.fisheye.CALIB_RECOMPUTE_EXTRINSIC + cv2.fisheye.CALIB_CHECK_COND + cv2.fisheye.CALIB_FIX_SKEW,(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-6)
)print("Found " + str(N_OK) + " valid images for calibration")
print("K=np.array(" + str(K.tolist()) + ")")
print("D=np.array(" + str(D.tolist()) + ")")
#其中,K是相机内参矩阵,D是畸变系数。

结语:通过棋盘格标定板来标定鱼眼镜头,计算出相机的内参矩阵和畸变系数,为后续的图像校正和三维重建等任务提供基础。

http://www.lryc.cn/news/573608.html

相关文章:

  • 风险矩阵与灰色综合评价
  • AMAT P5000 CVDFDT CVDMAINT Precision 5000 Mark 操作 电气原理 PCB图 电路图等
  • git 如何忽略某个文件夹文件
  • NW896NW859美光固态闪存NW893NX764
  • 激活函数为何能增强神经网络的非线性表达能力?
  • 【node】Mac m1 安装nvm 和node
  • WEB3合约开发以太坊中货币单位科普
  • 【数据结构与算法】数据结构核心概念系统梳理
  • go excel解析库xuri/excelize中的SAX
  • 【人工智能基础】初识神经网络
  • 2.jupyter切换使用conda虚拟环境的最佳方法
  • Flink SQL Connector Kafka 核心参数全解析与实战指南
  • Windows防火墙指南大全:安全红线与科学替代方案
  • 通俗理解物联网中的APN
  • Vmware WorkStation 17.5 安装 Ubuntu 24.04-LTS Server 版本
  • 【机器学习】数学基础——张量(进阶篇)
  • 九联UNT403G/UNT413G-国科GK6323V100C-2+8G/4+16G-安卓9.0-优盘短接强刷固件包
  • 抖音小程序开发:ttml和传统html的区别
  • 深入解析C#数组协变与克隆机制
  • Android NDK—JNI基础
  • Linux(3)
  • Kafka 原理与核心机制全解析
  • Vite 原理深入剖析
  • 【PyTorch革命】机器学习系统编程模型的演进之路
  • 从C++编程入手设计模式——命令模式
  • 【机器学习四大核心任务类型详解】分类、回归、聚类、降维智能决策指南
  • 8.特征提取与直方图
  • MATLAB GUI界面设计 第二章——APP Designer操作正式入门
  • Linux 下的 socket
  • Node.js爬虫 CheerioJS ‌轻量级解析、操作和渲染HTML及XML文档