【鱼眼+普通相机】相机标定

一、简介

本文提供了鱼眼及普通相机的标定python版源码,调用opencv的接口,原理为张正友标定法。这里不过多赘述,话不多说无套路直接上源码,亲测有效,搬走即用。

注:

  1. 需准备一个标定版,在此网站下载打印出来即可;
  2. 例如12x8的棋盘格内角点为11x7.

二 、源码

2.1 鱼眼相机标定

"""
~~~~~~~~~~~~~~~~~~~~~~~~~~
鱼眼相机标定
~~~~~~~~~~~~~~~~~~~~~~~~~~用法:python calibrate_camera.py \-i 0 \-grid 9x6 \-out fisheye.yaml \-framestep 20 \--resolution 640x480--fisheye
"""
import argparse
import os
import numpy as np
import cv2# 将相机参数文件保存到此目录
TARGET_DIR = os.path.join(os.getcwd(), "yaml")# 默认参数文件
DEFAULT_PARAM_FILE = os.path.join(TARGET_DIR, "calib.yaml")def main():global grayparser = argparse.ArgumentParser()# 输入视频流parser.add_argument("-i", "--input", type=int, default=0,help="输入相机设备")# 棋盘格大小parser.add_argument("-grid", "--grid", default="10x7",help="标定棋盘格的大小")parser.add_argument("-r", "--resolution", default="640x480",help="相机图像的分辨率")parser.add_argument("-framestep", type=int, default=20,help="在视频中使用每第n帧")parser.add_argument("-o", "--output", default=DEFAULT_PARAM_FILE,help="输出yaml文件的路径")args = parser.parse_args()if not os.path.exists(TARGET_DIR):os.mkdir(TARGET_DIR)text1 = "按下 c 进行标定"text2 = "按下 q 退出"text3 = "设备: {}".format(args.input)font = cv2.FONT_HERSHEY_SIMPLEXfontscale = 0.6resolution_str = args.resolution.split("x")W = int(resolution_str[0])H = int(resolution_str[1])grid_size = tuple(int(x) for x in args.grid.split("x"))grid_points = np.zeros((1, np.prod(grid_size), 3), np.float32)grid_points[0, :, :2] = np.indices(grid_size).T.reshape(-1, 2)objpoints = []  # 真实世界空间中的3D点imgpoints = []  # 图像平面中的2D点device = args.inputcap = cv2.VideoCapture(device)  # 打开设备# 设置分辨率cap.set(cv2.CAP_PROP_FRAME_WIDTH, W)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, H)if cap is None or not cap.isOpened():print("无法打开设备")returnquit = Falsedo_calib = Falsei = -1while True:i += 1_r, img = cap.read

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

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

相关文章

音频—WAV格式及写入wav文件代码实现

1.RIFF规范 FIFF 是 Resource Interchange File Format(资源交换文件格式)的简称。RIFF 是一种文件格式规范,用于在计算机系统之间交换和存储多媒体资源。WAV 文件格式是 Microsoft 的 RIFF 规范的一个子集。 RIFF 规则定义了文件的结构和数…

【案例分享】校园服务小程序开发经验和主要功能,引领校园生活新方式

随着移动互联网的普及,学生们对于校园生活的需求也在不断增长。校园圈子、校园跑腿、校园外卖、校园服务等小程序等应用应运而生,为学生们提供了更加便捷、高效的生活方式。那么,如何开发一款能够满足学生需求的校园服务小程序呢?…

react18封装公共请求函数

如果里面要处理比如token过期,跳转登录这种情况的话,官方又说组件外不允许使用Hooks函数,这里可以这样做 使用redux 并新建一个store/index.ts import { configureStore, combineReducers } from reduxjs/toolkit import counterRouter fro…

JavaScript创建日期

创建日期 在JavaScript中创建日期有四种方法 ● 使用new Date() const now new Date(); console.log(now);● 直接输入月、日、年、时间 console.log(new Date(Aug 02 2024 18:05:41));● 也可以输入年月日 console.log(new Date(December 24, 2015));● 直接按照年、月、…

用于接收参数的几个注解

了解四种主要请求方法的传参格式 GET方法: 参数通常通过URL的查询字符串(query string)传递,形式为key1value1&key2value2。示例:http://example.com/api/resource?key1value1&key2value2 POST方法&#xf…

C++入门系列-析构函数

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 析构函数 概念 析构函数,与构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的,而对象在销…

基于深度学习的人体关键点检测与姿态识别

文章目录 源码下载地址: 源码地址在视频简介中 深度学习人体关键点检测,姿态识别 界面效果: 界面代码: from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * f…

OGG几何内核开发-BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound比较

最近在与同事讨论BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound有什么区别。 一、从直觉上来说,BRepAlgoAPI_Fuse会对两个实体相交处理,相交的部分会重新的生成相关的曲面。而BRep_Builder.MakeCompound仅仅是把两个实体组合成一个新的实体,…

Apache Sqoop:高效数据传输工具搭建与使用教程

目录 引言一、环境准备二、安装sqoop下载sqoop包解压文件 三、配置Sqoop下载mysql驱动拷贝hive的归档文件配置环境变量修改sqoop-env.sh配置文件替换版本的commons-lang的jar包 验证Sqoop安装查看Sqoop版本测试Sqoop连接MySQL数据库是否成功查看数据库查看数据表去除警告信息 四…

【免费】在线识别通用验证码接口

模块优势价格5元1000次&#xff0c;每天免费100次api文档支持 使用量小的完全够用了 <?phpfunction Post_base64($base64_str){$url http://api.95man.com:8888/api/Http/Recog?Taken41******QK&imgtype1&len0 ; $fields array( ImgBase64>$base64_str); $ch…

031.下一个排列Java实现

题意 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&#…

【退役之重学Java】Redis 持久化机制及其选择

一、RDB RDB 持久化机制&#xff0c;对 Redis 中的数据执行周期性的持久化 二、AOF AOF 机制对每条写入命令最为日志&#xff0c;以 append-only 的模式写入一个日志文件中&#xff0c;在 Redis 重启的时候&#xff0c;可以通过回放 AOF 日志中的写入指令&#xff0c;来重新…

SHELL脚本编程----sshd服务启停脚本

题目&#xff1a; 判断 sshd 进程是否运行&#xff0c;如果服务未启动则启动相应服务。 具体代码实现&#xff1a; #!/bin/bashsshd_servicesystemctl is-active sshdif [ "$sshd_service" "active" ]; thenecho "sshd is running....." els…

跟我学C++中级篇——内联补遗

一、内联引出的问题 在将一个内联变量定义到编译单元时&#xff0c;然后再按正常的方式使用时&#xff0c;编译会报一个错误“odr-used”。ODR&#xff0c;One Definition Rule&#xff0c;单一定义规则。在C/C程序中&#xff0c;变量的定义只能有一处&#xff0c;至于ODR的规…

移除链表元素(C语言)———链表经典算法题

题目描述&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 答案展示: 答1&#xff08;遍历删除&#xff09;&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNo…

第十七章 数据管理和组织变革管理练习

单选题 (每题1分,共10道题) 1、 [单选] 以下不属于科特确定了有效传播愿景关键要素是? A:保持简单 B:使用比喻、类比和例子 C:重复,重复,再重复 D:解释表面上的一致性 正确答案:D 你的答案:D 解析:详见书本P469 七大要素,D选项和第六要素 不一致和一致性 2、 …

c++多态机制

多态 在 C 中&#xff0c;多态&#xff08;Polymorphism&#xff09;是一种面向对象编程的重要概念&#xff0c;它允许不同类的对象对同一消息做出不同的响应。具体来说&#xff0c;多态性允许基类的指针或引用在运行时指向派生类的对象&#xff0c;并且根据对象的实际类型来调…

微信小程序支付全攻略:从零搭建到安全交易【微信支付】

微信小程序支付全攻略&#xff1a;从零搭建到安全交易 在移动互联网时代&#xff0c;微信小程序凭借其便捷性和高效性&#xff0c;成为了众多企业和开发者的心头好。其中&#xff0c;微信支付和小程序支付功能的集成&#xff0c;无疑是提升用户体验、增加商业转化的关键环节。…

1.5编程基础之循环控制 03:均值

描述 给出一组样本数据&#xff0c;计算其均值。 输入 输入有两行&#xff0c;第一行包含一个整数n&#xff08;n小于100&#xff09;&#xff0c;代表样本容量&#xff1b;第二行包含n个绝对值不超过1000的浮点数&#xff0c;代表各个样本数据。 输出 输出一行&#xff0…

CentOS 安装 Portainer

Portainer Community Edition是一个针对容器化应用程序的轻量级服务交付平台&#xff0c;可用于管理 Docker、Swarm、Kubernetes 和 ACI 环境。它的设计理念是部署和使用都简单&#xff0c;该应用程序允许您通过“智能”GUI 和/或广泛的 API 管理所有编排器资源。 1、查询Porta…