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

Matlab R2022b使用Camera Calibrator工具箱张正友标定法进行相机标定附带标定前后对比代码

打开Camera Calibrator
在这里插入图片描述
在这添加你拍摄的图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据你每个方块的实际边长填写,我是15mm。
在这里插入图片描述
通俗一点,要k3就选3 Coefficients,否则为0;要p1、p2就选Tangential Distortion。然后进行计算。
在这里插入图片描述
可以点击右侧误差高的选中图像进行移除来提高精度。
在这里插入图片描述
在这里插入图片描述
移除后会自动重新计算,然后导出参数。
在这里插入图片描述
在这里插入图片描述
导出后在工作区查看变量
在这里插入图片描述
K就是IntrinsicMatrix
TangentialDistortion分别是p1,p2
RadialDistortion分别是k1,k2,k3(选用2 Coefficients为0不显示)

标定后效果如下:

在这里插入图片描述

标定前后对比代码:

import cv2  
import numpy as np  
#IntrinsicMatrix
fx,cx,fy,cy=326.398894622712,284.954173978833,328.070507959748,218.798886581291
#TangentialDistortion
p1,p2=-0.000517178855500132,-0.00236634006321519
#RadialDistortion
k1,k2,k3=0.229371939302846,-0.194046239909587,0def undistort_video(camera_matrix, dist_coeffs, video_source=0):  # 打开视频流  cap = cv2.VideoCapture(video_source)  # 读取第一帧以获取其尺寸  ret, frame = cap.read()  if not ret:  print("无法打开视频流或文件")  return  h, w = frame.shape[:2]  # 创建一个窗口用于显示校正前的视频  cv2.namedWindow('Original Video', cv2.WINDOW_AUTOSIZE)  # 创建一个窗口用于显示校正后的视频  cv2.namedWindow('Undistorted Video', cv2.WINDOW_AUTOSIZE)  while True:  # 读取视频帧  ret, frame = cap.read()  if not ret:  break  # 校正图像  undistorted_frame = cv2.undistort(frame, camera_matrix, dist_coeffs, None, camera_matrix)  # 显示校正前和校正后的视频  cv2.imshow('Original Video', frame)  cv2.imshow('Undistorted Video', undistorted_frame)  # 按'q'键退出  if cv2.waitKey(1) & 0xFF == ord('q'):  break  # 释放资源和关闭窗口  cap.release()  cv2.destroyAllWindows()  # 假设你已经有了这些参数,这里只是示例值  
camera_matrix = np.array([[fx, 0, cx],  [0, fy, cy],  [0, 0,  1]], dtype=np.float32)  
dist_coeffs = np.array([k1, k2, p1, p2, k3], dtype=np.float32)  # 注意:将 fx, fy, cx, cy, k1, k2, p1, p2, k3 替换为你的实际标定值  # 调用函数  
undistort_video(camera_matrix, dist_coeffs)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 论文翻译:Multi-step Jailbreaking Privacy Attacks on ChatGPT
  • 设计模式(四)
  • 掌握 Rust 中的 YAML 魔法:Serde_yaml 使用指南
  • 【前端开发】国际化开发工具i18n的使用教程
  • MySQL 数据库深度解析:安装、语法与高级查询实战
  • BMC解决方案丨服务器故障诊断与预测平台方案设计与实现
  • 计算机毕业设计选题推荐-医疗就诊平台-在线医疗问诊系统-Java/Python项目实战
  • 【Android】根据URI获取文件扩展名或MimeType
  • Android SurfaceFlinger——共享内存读写流程(五十五)
  • 探索微服务架构中的动态服务发现与调用:使用 Nacos 与 Spring Cloud OpenFeign 打造高效订单管理系统
  • 如何将 Parallels Desktop 许可证密钥移至新的 Mac?
  • Android 获取通话记录
  • 【Verilog 数字系统设计教程】Verilog 基础:硬件描述语言入门指南
  • 登录校验组件 Spring Security OAuth2 详解
  • 【CVPR‘24】BP-Net:用于深度补全的双边传播网络,新 SOTA!
  • 分享的文章《人生如棋》
  • #Java异常处理
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • android图片蒙层
  • css系列之关于字体的事
  • java正则表式的使用
  • js中forEach回调同异步问题
  • JS字符串转数字方法总结
  • Phpstorm怎样批量删除空行?
  • Redis学习笔记 - pipline(流水线、管道)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Spring Cloud中负载均衡器概览
  • vue.js框架原理浅析
  • Yeoman_Bower_Grunt
  • 电商搜索引擎的架构设计和性能优化
  • 简单实现一个textarea自适应高度
  • 来,膜拜下android roadmap,强大的执行力
  • 力扣(LeetCode)22
  • 温故知新之javascript面向对象
  • Mac 上flink的安装与启动
  • 阿里云ACE认证之理解CDN技术
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​学习一下,什么是预包装食品?​
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (13)DroneCAN 适配器节点(一)
  • (4)Elastix图像配准:3D图像
  • (Java入门)学生管理系统
  • (TOJ2804)Even? Odd?
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (七)Flink Watermark
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十三)Flask之特殊装饰器详解
  • (一)、python程序--模拟电脑鼠走迷宫
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • ***检测工具之RKHunter AIDE
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .Net CF下精确的计时器