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

news2024/9/25 11:22:26

打开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,0

def 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2083993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】计算机网络的分层结构

为什么要分层?为什么要制定协议? 计算机网络功能复杂→采用分层结构,将诸多功能合理地划分在不同层次→对等层之间制定协议,以实现功能。

探索Scratch编程:重温《西游记-大战蜘蛛精》

小虎鲸Scratch资源站-免费Scratch作品源码,素材,教程分享平台! 在编程教育的浪潮中,Scratch以其简单易用的特点,成为了孩子们学习编程的热门选择。今天,我们很高兴向大家介绍一款精彩的Scratch教学案例作品——《西游记-大战蜘蛛精》。这不仅…

【JAVA入门】Day27 - 集合体系结构综述

【JAVA入门】Day27 - 集合体系结构综述 文章目录 【JAVA入门】Day27 - 集合体系结构综述一、单列集合体系结构1.1 Collection 集合的基本方法1.2 Collection 集合的遍历方式1.2.1 迭代器遍历1.2.2 增强 for 遍历1.2.3 利用 Lambda 表达式进行遍历 1.3 List 集合的基本方法1.4 L…

pyhton __init__.py

文章目录 包和模块__init__.py概述导入包和使用模块控制导入行为 包和模块 在这样一个工程中,pkg是包(package),module1.py和module2.py是模块(module),在模块中还有定义的方法、变量等,可以统称为功能。 import可以导入包&…

Node-RED解析巴法云/小米的传感器数据

在前面的博文(Node-RED订阅巴法云的数据并展示-CSDN博客)中提到过,Node-RED对JSON格式的数据很友好,直接可以解析。不过巴法云默认的格式是小米所采用的格式,即:#温度#湿度#开关#。采用这种格式的好处就是巴…

【C++二分查找】2271. 毯子覆盖的最多白色砖块数

本文涉及的基础知识点 C二分查找 LeetCode2271. 毯子覆盖的最多白色砖块数 给你一个二维整数数组 tiles &#xff0c;其中 tiles[i] [li, ri] &#xff0c;表示所有在 li < j < ri 之间的每个瓷砖位置 j 都被涂成了白色。 同时给你一个整数 carpetLen &#xff0c;表…

C++ | Leetcode C++题解之第381题O(1)时间插入、删除和获取随机元素-允许重复

题目&#xff1a; 题解&#xff1a; class RandomizedCollection { public:unordered_map<int, unordered_set<int>> idx;vector<int> nums;/** Initialize your data structure here. */RandomizedCollection() {}/** Inserts a value to the collection. …

笔记报警管理

1. IOT创建新产品 睡眠检测带 2. 养老后台 添加了一个设备 睡眠检测带_201_1 3. 新增了模拟器(3个模拟js运行) 4. 创建了消费者组(默认DEFAULT) 5. 创建订阅(3个产品的上报信息 传给DEFAULT)消息处理 前面我们已经完成了设备的管理&#xff0c;现在&#xff0c;我们就来处…

50.x86游戏实战-XXX副本内瞬图

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

《前端攻城狮 · Snowflake 雪花算法》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

Ruff :是一个用Rust编写的极快的 Python linter 和代码格式化程序

安装 pip install ruff 语法检查 要对代码运行 linter&#xff0c;我们使用 ruff check . 如果你想在单个文件上运行它&#xff0c;请这样做 ruff check <filename.py> 总共有 415 个错误。其中 33 个可以修复&#xff01; 为了修复它们&#xff0c;我们使用标志--f…

深度学习实用方法 - 选择超参数篇

序言 在深度学习的浩瀚领域中&#xff0c;超参数的选择无疑是通往卓越模型性能的一把关键钥匙。超参数&#xff0c;作为训练前设定的、用于控制学习过程而非通过学习自动获得的参数&#xff0c;如学习率、批量大小、网络层数及节点数等&#xff0c;直接影响着模型的收敛速度、…

LLMOP 面向LLM编程,让你的接口和代码对LLM更友好!

LLM Oriented Programming ApiHug Lint 检查报告 - ApiHugApihug quality lint tools to check api design violationshttps://apihug.com/zhCN-docs/tool/apihug-lint ​LLMOP 面向LLM编程&#xff08;LLMOP&#xff09;代表了我们构思和设计API的范式转变。该方法旨在创建不…

TRIZ理论在传感技术创新中的应用优势

传感技术作为连接物理世界与数字世界的桥梁&#xff0c;正以前所未有的速度推动着社会进步与产业升级。而TRIZ&#xff08;发明问题解决理论&#xff09;这一强大的创新方法论&#xff0c;也开始悄然在传感技术领域绽放异彩&#xff0c;为创新者提供了前所未有的设计灵感与解决…

CCF CSP题解:因子化简(202312-2)

链接和思路 OJ链接&#xff1a;传送门。 问题重述 本题基于一个基本事实&#xff0c;即任何一个大整数 n n n都可以唯一地分解为如下形式 n p 1 t 1 p 2 t 2 ⋯ p m t m n p_1^{t_1} \times p_2^{t_2} \times \cdots \times p_m^{t_m} np1t1​​p2t2​​⋯pmtm​​其中…

软件测试 | 测试用例Ⅱ

基于需求的设计方法 测试人员接到需求后&#xff0c;要对需求进行分析和验证&#xff0c;从合理的需求中进一步分析细化需求&#xff0c;从细化的需求中找出测试点&#xff0c;根据这些测试点再去设计测试用例。 上面就是根据需求文档先设计出来的初步的测试用例&#xff0c;而…

数据库表太多,如何快速定位到需要字段

MySQL数据库表太多&#xff0c;如何快速定位到需要字段 问题&#xff1a; 数据库的表太多&#xff0c;自己只通过后端代码&#xff0c;知道数据字段名。现在想搜索数据库中所有表&#xff0c;查到对应字段&#xff0c;实现报表开发。 一、方案 在MySQL数据库中&#xff0c;如…

【web网页制作】中国传统文化书法主题html网页制作开发div+css(6页面附效果源码)

HTMLCSS传统文化主题书法网页制作 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、网页效果菜单切换效果PageA、整体页Page1、主页Page2、行书页Page3、楷书页Page4、隶书页Page5、篆书页Page6、草书页 &#x1f40b;三、网页架构与技术…

微前端集成优化:让所有子应用体积更小,加载更快!

简介 随着前端的日益发展&#xff0c;微前端架构越来越受到青睐。它通过将前端应用拆分为多个独立的子应用&#xff0c;每个子应用可以独立开发、部署和运行&#xff0c;从而提升了开发效率和团队协作。目前主流的微前端方案应该是qiankun了。 以笔者公司为例&#xff0c;采用…

AI在医学领域:基础模型和视觉-语言模型在计算病理学应用概述

近年来&#xff0c;人工智能&#xff08;AI&#xff09;基于方法在计算病理学&#xff08;CPath&#xff09;领域中的应用迅速增长&#xff0c;这主要得益于数字幻灯片扫描仪的广泛采用。因此&#xff0c;大规模的全幻灯片图像&#xff08;Whole Slide Images, WSIs&#xff09…