oak相机使用oak官网方式标定
目录
一、depthai ROS驱动
一、depthai ROS驱动
(1)驱动下载地址:2. C++ 开发快速上手 — DepthAI Docs 0.3.0.0 documentation
sudo apt install ./depthai_2.17.1_arm64.deb
//运行
Python3 utilities/cam_test.py -mres 400 -cams rgb,m left,m right,m camd,m
(2)或者运行python脚本打开相机
import depthai as dai
import cv2cam_list = ["CAM_B", "CAM_C", "CAM_D","CAM_A"]
cam_socket_opts = {"CAM_A": dai.CameraBoardSocket.RGB,"CAM_B": dai.CameraBoardSocket.LEFT,"CAM_C": dai.CameraBoardSocket.RIGHT,"CAM_D": dai.CameraBoardSocket.CAM_D,
}pipeline = dai.Pipeline()
cam = {}
xout = {}
for c in cam_list:cam[c] = pipeline.create(dai.node.MonoCamera)cam[c].setResolution(dai.MonoCameraProperties.SensorResolution.THE_800_P)if c == "CAM_A":cam[c].initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.OUTPUT)else:cam[c].initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)# cam[c].initialControl.setExternalTrigger(4, 3)cam[c].setBoardSocket(cam_socket_opts[c])cam[c].setFps(20)xout[c] = pipeline.create(dai.node.XLinkOut)xout[c].setStreamName(c)cam[c].out.link(xout[c].input)config = dai.Device.Config()
config.board.gpio[6] = dai.BoardConfig.GPIO(dai.BoardConfig.GPIO.OUTPUT, dai.BoardConfig.GPIO.Level.HIGH
)
# config.version = dai.OpenVINO.VERSION_UNIVERSALwith dai.Device(config) as device:device.startPipeline(pipeline)print('Connected cameras:')for p in device.getConnectedCameraFeatures():print(f' -socket {p.socket.name:6}: {p.sensorName:6} {p.width:4} x {p.height:4} focus:', end='')print('auto ' if p.hasAutofocus else 'fixed', '- ', end='')print(*[type.name for type in p.supportedTypes])q = {}for c in cam_list:q[c] = device.getOutputQueue(name=c, maxSize=1, blocking=False)cv2.namedWindow(c, cv2.WINDOW_NORMAL)cv2.resizeWindow(c, (640, 480))while not device.isClosed():git clone https://github.com/ethz-asl/kalibr.gitframe_list = []for c in cam_list:pkt = q[c].tryGet()if pkt is not None:print(c + ":", pkt.getTimestampDevice())frame_list.append((c, pkt.getCvFrame()))# cv2.imshow(c, frame)if frame_list:print("-------------------------------")for c,frame in frame_list:cv2.imshow(c, frame)#print("-------------------------------")key = cv2.waitKey(1)if key == ord("q"):break
(3)使用python脚本
'''func:驱动DepthAi套件的相机by:2024.7.5
'''
import depthai as dai
import cv2
import queue
class CamerDrive():cam_list = ['rgb', 'left', 'right', 'camd']cam_socket_opts = {}pipeline = dai.Pipeline()# 初始化两个字典,用于存储摄像头节点和XLinkOut节点cam = {}xout = {}#frameQueue = {}device = None# myFrameQueue = {}# 构造函数def __init__(self):self.cam_socket_opts = {'rgb': dai.CameraBoardSocket.RGB, # Or CAM_A 板载接口名称可复用'left': dai.CameraBoardSocket.LEFT, # Or CAM_B'right': dai.CameraBoardSocket.RIGHT, # Or CAM_C'camd': dai.CameraBoardSocket.CAM_D,}# 配置相机节点def cameraNodeConfig(self):for c in self.cam_list:# 创建MonoCamera节点(注意:这里可能对于RGB摄像头需要改为ColorCamera)self.cam[c] = self.pipeline.create(dai.node.MonoCamera)# if c == 'rgb':# self.cam[c] = self.pipeline.create(dai.node.ColorCamera)# 设置摄像头分辨率为800Pself.cam[c].setResolution(dai.MonoCameraProperties.SensorResolution.THE_800_P)# 根据摄像头类型设置帧同步模式if c == 'rgb':self.cam[c].initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.OUTPUT) # 输出同步模式else:self.cam[c].initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 输入同步模式# 设置摄像头连接到板载的哪个接口self.cam[c].setBoardSocket(self.cam_socket_opts[c])# 创建XLinkOut节点,用于将摄像头数据输出到主机self.xout[c] = self.pipeline.create(dai.node.XLinkOut)# 设置输出流的名称self.xout[c].setStreamName(c)# 将摄像头的输出链接到XLinkOut的输入self.cam[c].out.link(self.xout[c].input)def depthAIConfig(self):config = dai.Device.Config()# 将GPIO引脚6配置为输出模式,并设置初始电平为高config.board.gpio[6] = dai.BoardConfig.GPIO(dai.BoardConfig.GPIO.OUTPUT,dai.BoardConfig.GPIO.Level.HIGH)# 使用Device类创建一个设备实例,并传入之前配置的配置对象。同时,使用with语句确保设备在使用完毕后正确关闭。# with dai.Device(config) as device:self.device = dai.Device(config)# 启动pipeline对象self.device.startPipeline(self.pipeline)# 遍历相机列表,为每个相机设置输出队列、OpenCV窗口,并初始化FPS计算对象。for c in self.cam_list:self.frameQueue[c] = self.device.getOutputQueue(name=c, maxSize=1, blocking=False) # 获取相机输出队列,非阻塞模式cv2.namedWindow(c, cv2.WINDOW_NORMAL) # 为每个相机创建一个OpenCV窗口cv2.resizeWindow(c, (640, 480)) # 调整窗口大小def get_Frame(self):while True:for c in self.cam_list:# 尝试从输出队列中获取一帧数据。try:pkt = self.frameQueue[c].tryGet()if pkt is not None:# 将数据包转换为OpenCV的Mat对象并显示。frame = pkt.getCvFrame()cv2.imshow(c, frame)else:print('sda')key = cv2.waitKey(1)if key == ord('q'):breakexcept:passif __name__ == '__main__':a = CamerDrive()a.cameraNodeConfig()a.depthAIConfig()a.get_Frame()
二、获取相机内参
1.安装depthai-ros
mkdir -p dai_ws/src
cd dai_ws/src
git clone https://gitee.com/oakchina/depthai-ros.git
cd ..
source /opt/ros/melodic/setup.bash
rosdep install --from-paths src --ignore-src -r -y
catkin_make
source devel/setup.bash
2.执行相机对应的launch文件
cd dai_ws
source devel/setup.bash
roslaunch depthai_examples mobile_publisher.launch camera_model:=OAK-D
3.查看相机内参
rostopic echo -n 1 /mobilenet_publisher/color/camera_info
4.相机内参结果
| 相机内参Intrinsics: k表示等距畸变系数,mu,mv对应焦距,v,u对应主点坐标。 相机外参Extrinsics(从右目往左目): rotation表示旋转矩阵, translation表示平移矩阵。 D、K、R、P 分别为畸变参数,内参矩阵,矫正矩阵,投影矩阵。 seq: 0 stamp: secs: 1719912958 nsecs: 823117551 frame_id: "oak_rgb_camera_optical_frame" height: 720 width: 1280 distortion_model: "plumb_bob" 畸变参数D: [-1.87286, 16.683033, 0.001053, -0.002063, 61.878521, -2.158907, 18.424637, 57.682858, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] 内参矩阵 K: [1479.458984, 0.0, 950.694458, 0.0, 1477.587158, 530.697632, 0.0, 0.0, 1.0] R: [0.9997062937394856, -0.023389961528659683, 0.006343181957754751, 0.0233922879452606, 0.999726320114537, -0.0002928052810344399, -0.006334597252184302, 0.0004411008211352551, 0.9999798389506251] P: [1479.458984, 0.0, 950.694458, 0.0, 0.0, 1477.587158, 530.697632, 0.0, 0.0, 0.0, 1.0, 0.0] binning_x: 0 binning_y: 0 roi: x_offset: 0 y_offset: 0 height: 0 width: 0 do_rectify: False --- |
三、OAK相机外参
git clone https://gitee.com/oakchina/depthai.git
python3 install_requirements.py
//运行
python3 calibrate.py -s 2.75 -ms 2.05 -brd OAK-D -cd 0 -c 1 -mst 1
-db:表示默认板,表示你正在使用 Charuco 标记。
-
-nx:x 方向上的 Charuco 标记数。
-
-c:每次显示多边形时拍摄的照片数量(可选,建议在你的情况下省略)。
-
-cd:拍摄照片前的倒计时时间(以秒为单位)(可选,建议用于更快的图像校准)。
-
-s:Charuco 标记周围的正方形大小(以厘米为单位)。
-
-ms:标记的大小(以厘米为单位)。
-
-brd:设备的板(在本例中为 OAK-D-SR-POE)
修改其json文件
{"board_config":{"name": "OAK-D","revision": "R1M0E1","cameras":{"CAM_A": {"name": "rgb","hfov": 89.5水平视场角"type": "color"相机类型},"CAM_B": {"name": "left","hfov": 71.86,"type": "mono","extrinsics": {"to_cam": "CAM_C","specTranslation": {"x": -7.5,"y": 0,"z": 0},"rotation":{"r": 0,"p": 0,"y": 0}}},"CAM_C": {"name": "right","hfov": 71.86,"type": "mono","extrinsics": {"to_cam": "CAM_A","specTranslation": {"x": 3.75,"y": 0,"z": 0},"rotation":{"r": 0,"p": 0,"y": 0}}}},"stereo_config":{"left_cam": "CAM_B","right_cam": "CAM_C"}}
}
标定结果

相关文章:
oak相机使用oak官网方式标定
目录 一、depthai ROS驱动 一、depthai ROS驱动 (1)驱动下载地址:2. C 开发快速上手 — DepthAI Docs 0.3.0.0 documentation sudo apt install ./depthai_2.17.1_arm64.deb //运行 Python3 utilities/cam_test.py -mres 400 -cams rgb,m …...
打造高效能“园区企业服务平台”,让企业更好更快发展!
近年来,随着我国经济的快速发展,各地产业园区建设如火如荼,成为区域经济的支柱,如果说园区是区域经济的支柱,企业则是园区的血液,给园区带来生命力,为园区发展提供着动力,各地政府…...
【常见开源库的二次开发】基于openssl的加密与解密——openssl认识与配置(一)
目录: 目录: 一、什么是openssl? 二、所需要具备的开发工具 三、Windows上编译OpenSSL3.0 四、Linux编译openssl3.0 一、什么是openssl? OpenSSL 是一个开源的软件库,它提供了一系列加密工具和协议,主要用…...
前端时间格式传入后端负载里面没有东西
我是因为没有将时间值格式化,所有负载没有东西 <el-col :md"6"><el-form-item label"创建时间" prop"createTime"><el-date-picker v-model"queryParams.createTime" type"date" change"ha…...
BUCK电源芯片,电气参数,极限参数,工作特性,引脚功能
概述 在应用DC-DC开关电源芯片时,通常需要关注以下参数,同步与非同步,输入电压,输入电流,输出电压,输出电流,输入输出电容的选择;mosfet选型,电感选型,功耗&a…...
学习小记-使用Redis的令牌桶算法实现分布式限流
在介绍令牌桶算法前先介绍一下漏桶算法(Leaky Bucket) 漏桶算法(Leaky Bucket) 漏桶算法是一种固定容量的容器模型,它通过控制数据流入和流出的速度来限制数据的传输速率。漏桶算法的主要特点包括: 固定…...
electron + express 实现 vue 项目客户端部署
写在前面 作为一个前端程序员,如何实现从前端到客户端的跨越,可能是一个很难实现的事。但客户需求千奇百怪,偶尔遇到一个非要客户端的,如何应对? 那Electron可能真是你福音。具体它有哪些功能,可自行官网…...
千万慎投!自引率高达93%!这16本On hold正处于高危状态,无法检索,剔除岌岌可危中!近四年镇压期刊“出狱”情况一览
本周投稿推荐 SCI • 能源科学类,1.5-2.0(25天来稿即录) • CCF推荐,4.5-5.0(2天见刊) • 生物医学制药类(2天逢投必中) EI • 各领域沾边均可(2天录用)…...
【数据结构】排序——快速排序
前言 本篇博客我们继续介绍一种排序——快速排序,让我们看看快速排序是怎么实现的 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 目录 …...
Matlab 怎么查找矩阵中所有0的数据并赋值
index find(X40); X4(index)57.71527;...
开发一个HTTP模块
开发一个HTTP模块 HTTP模块的数据结构ngx_module_t模块的数据结构ngx_http_module_t数据结构ngx_command_s 数据结构 定义一个HTTP模块处理用户请求返回值获取URI和参数方法名URIURL协议版本 获取HTTP头获取HTTP包体 发送响应发送HTTP头发送内存中的字符串作为包体返回一个Hell…...
vue2实现复制,粘贴功能,使用vue-clipboard2插件
一、需求说明 在项目中 点击按钮 复制 某行文本是很常见的 应用场景, 在 Vue 项目中实现 复制功能 需要借助 vue-clipboard2 插件。 二、代码实现 1、安装 vue-clipboard2 依赖 ( 出现错误的话,可以试试切换成淘宝镜像源 npm config set r…...
【软件测试】 1+X初级 功能测试试题
【软件测试】 1X初级 功能测试试题 普通员工登录系统,在“个人信息维护”模块,可以查看和维护个人信息。个人信息维护需求包括用户(UI)页面、业务规则两部分。 UI 界面 个人信息维护 修改基本信息 业务规则 1. 个人信息维护页面…...
zynq启动和程序固化流程
普通FPGA启动 FPGA的启动方式主要包含主动模式、被动模式和JTAG模式。 主动模式(AS模式) 当FPGA器件上电时,它作为控制器从配置器件EPCS中主动发出读取数据信号,并将EPCS的数据读入到自身中,实现对FPGA的编程。这种…...
CSS3实现彩色变形爱心动画【附源码】
随着前端技术的发展,CSS3 为我们提供了丰富的动画效果,使得网页设计更加生动和有趣。今天,我们将探讨如何使用 CSS3 实现一个彩色变形爱心加载动画特效。这种动画不仅美观,而且可以应用于各种网页元素,比如加载指示器或…...
【JVM基础篇】Java的四种垃圾回收算法介绍
文章目录 垃圾回收算法垃圾回收算法的历史和分类垃圾回收算法的评价标准标记清除算法优缺点 复制算法优缺点 标记整理算法(标记压缩算法)优缺点 分代垃圾回收算法(常用)JVM参数设置使用Arthas查看内存分区垃圾回收执行流程分代GC算…...
Kodcloud可道云安装与一键发布上线实现远程访问详细教程
文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 本文主要为大家介绍一款国人自研的在线Web文件管理器可道云,…...
python杨辉三角的两种书写方式
第一种(设置二维列表设置每个元素为0进行替换元素) 代码演示: n eval(input("请输入想要的行数")) lst[[0 for j in range(n)] for i in range(n)] # lst2[[0]*n]*n for i in range(n):for j in range(i1):if j0 or ji:lst[i][j…...
【CSS in Depth 2精译】2.5 无单位的数值与行高
当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高 ✔️2.6 自定义属性2.7 本章小结 2.5 无单位的数值与行高 有些属性允许使用无单位的数值(unitless value…...
【人脸识别、Python实现】PyQt5人脸识别管理系统
PyQt5人脸识别管理系统 项目描述主要功能效果展示获取源码 项目描述 接的一个基于宿舍管理系统与人脸识别的小单子。然后我把它优化了一些,现在开源一下。有需要的小伙伴自取,点个免费的关注就行 主要功能 1、录入学生基本信息、录入人脸 2、主页面展…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
