非常详细的相机标定(六)(2维坐标点转为3维坐标点)
根据提取的相机的参数,2维坐标点转为3维坐标点,代码如下:
import argparse
from argparse import RawTextHelpFormatter
import numpy as np
import cv2# 寻找焦点
def cam_calib_find_corners(img, rlt_dir, col, row):# 灰度化图片,减少参数的运算gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 寻找角点ret, corners = cv2.findChessboardCorners(gray, (col, row), None)# 为了得到稍微精确一点的角点坐标,进一步对角点进行亚像素寻找corners2 = cv2.cornerSubPix(gray, corners, (7, 7), (-1, -1), (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_COUNT, 10, 0.001))if ret == True:# 保存角点图像sav_path = rlt_dir + "/1_corner.jpg"# 绘制角点cv2.drawChessboardCorners(img, (col, row), corners2, ret)cv2.imwrite(sav_path, img)return (ret, corners2)# 相机标定
def cam_calib_calibrate(img_dir, rlt_dir, col, row, img_num):w = 0h = 0all_corners = []patterns = []x, y = np.meshgrid(range(col), range(row))prod = row * colpattern_points = np.hstack((x.reshape(prod, 1), y.reshape(prod, 1), np.zeros((prod, 1)))).astype(np.float32)img_path = r"C:\Users\17930\Desktop\1.jpg"img = cv2.imread(img_path)if img is None:print(f"Error reading image at {img_path}")passelse:(h, w) = img.shape[:2]ret, corners = cam_calib_find_corners(img, rlt_dir, col, row)all_corners.append(corners)patterns.append(pattern_points)rms, cameraMatrix, distCoeffs, rvecs, tvecs = cv2.calibrateCamera(patterns, all_corners, (w, h), None, None)print('相机内参', cameraMatrix)print('相机外参旋转向量', rvecs)print('相机外参平移向量', tvecs)return cameraMatrix, distCoeffs, rvecs, tvecsif __name__ == "__main__":parser = argparse.ArgumentParser(description="读取标定的图片并保存结果", formatter_class=RawTextHelpFormatter)parser.add_argument("--img_dir", help="标定图片路径", type=str,metavar='', default=r'D:\螺丝数据集与相机标定代码\camera\calib_img')parser.add_argument("--rlt_dir", help="保存路径", type=str,metavar='', default="rlt_dir")parser.add_argument("--crct_img_dir", help="待矫正图像路径",type=str, metavar='', default="crct_img")parser.add_argument("--row_num", help="每一行有多少个角点,边缘处的不算",type=int, metavar='', default="7")parser.add_argument("--col_num", help="每一列有多少个角点,边缘处的不算",type=int, metavar='', default="6")parser.add_argument("--img_num", help="多少幅图像",type=int, metavar='', default="4")args = parser.parse_args()cameraMatrix, distCoeffs, rvecs, tvecs = cam_calib_calibrate(args.img_dir, args.rlt_dir, args.row_num, args.col_num, args.img_num)image_points = np.array([[55, 66], [77, 88]], dtype=np.float32)world_z = 0world_points = []for i in range(len(rvecs)):rotation_matrix, _ = cv2.Rodrigues(rvecs[i])projection_matrix = np.dot(cameraMatrix, np.hstack((rotation_matrix, tvecs[i])))inv_projection_matrix = np.linalg.pinv(projection_matrix)for pt in image_points:img_pt = np.array([pt[0], pt[1], 1])ray_dir = np.dot(inv_projection_matrix, img_pt)scale = (world_z - tvecs[i][2]) / ray_dir[2]world_pt = tvecs[i].reshape(3) + scale * ray_dir[:3]world_points.append(world_pt)world_points = np.array(world_points)print(world_points)

相关文章:
非常详细的相机标定(六)(2维坐标点转为3维坐标点)
根据提取的相机的参数,2维坐标点转为3维坐标点,代码如下: import argparse from argparse import RawTextHelpFormatter import numpy as np import cv2# 寻找焦点 def cam_calib_find_corners(img, rlt_dir, col, row):# 灰度化图片&#x…...
云计算虚拟仿真实训平台
一、云计算虚拟仿真系统概述 云计算虚拟仿真系统是一种基于云计算技术和虚拟化技术的系统,用于实现各种仿真和模拟任务。它可以提供强大的计算能力和资源管理,为用户提供灵活、高效、可扩展的仿真环境。 该系统通常由一组服务器、网络和存储设备组成&am…...
计算机网络:网络字节序
目录 一、字节序1.字节序概念2.字节序的理解(1)大端模式存储数据(2)小端模式存储数据 二、网络字节序 一、字节序 1.字节序概念 字节序:内存中存储多字节数据的顺序。 难道存储数据还要看顺序吗? yes。内…...
2023国赛数学建模A题思路分析
文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…...
【Java】常见面试题:网络
目录 1. 为什么需要网络协议的分层?2. 【封装和分用】3. Socket套接字主要针对传输层协议划分为如下三类(了解)4. 简单说一下TCP和UDP的区别:5. TCP中的长短连接6. 应用层重点协议7. TCP可靠传输机制(三次握手四次挥手…...
TTS | VocGAN声码器训练自己的数据集
哈喽,今天给大家介绍的是如何使用VocGAN声码器训练自己的数据集。 原文 VocGAN: A High-Fidelity Real-time Vocoder with a Hierarchically-nested Adversarial Network 想要论文解读,请参考我的这篇文章~ 本博客主要包括以下内容: 目录…...
nuxt3--prisma配置
目录 一、初始化二、修改配置三、创建数据库表四、安装Prisma客户端五、查询数据库 一、初始化 npm install prisma typescript ts-node types/node --save-devts-node 用来执行main函数更新数据库 根据实际情况安装,如果不需要的话只需要安装prisma tsconfig.json…...
学习ts(一)数据类型(基础类型和任意类型)
运行 起步安装 npm install typescript -g 运行tsc index.ts生成对应的js文件,然后使用node index.js执行js文件 为了方便运行还可以安装插件,ts-node index.ts运行即可 npm i ts-node -g npm init -y npm i types/node -D基本数据类型 // 1.字符…...
Qt 之 QPushButton,信号与槽机制
文章目录 前言一、QPushButton二、信号与槽机制总结 前言 一、QPushButton 当我们开发基于Qt框架的图形用户界面(GUI)应用程序时,经常需要在界面上添加按钮来实现用户交互。Qt提供了一个名为 QPushButton 的类作为按钮控件的实现。QPushButt…...
MySQL面试题一
MySQL 索引使用有哪些注意事项呢? 可以从两个维度回答这个问题: 索引哪些情况会失效,索引不适合哪些场景 索引哪些情况会失效 查询条件包含or,会导致索引失效。隐式类型转换,会导致索引失效, 例如age字…...
【Java】2021 RoboCom 机器人开发者大赛-高职组(复赛)题解
7-8 人工智能打招呼 号称具有人工智能的机器人,至少应该能分辨出新人和老朋友,所以打招呼的时候应该能有所区别。本题就请你为这个人工智能机器人实现这个功能:当它遇到陌生人的时候,会说:“Hello X, how are you?”其…...
使用electron-vue获取文件夹的路径
使用electron-vue获取文件夹的路径 记录一次开发过程中遇到的bug,我们的项目中需要将vue项目打包为桌面应用软件,为此我们引入了electron框架,在这个过程中,我们需要获取到用户电脑上面文件夹的绝对路径,用这篇文章记…...
剑指Offer14-II.剪绳子II C++
1、题目描述 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如&am…...
2023企业微信0day漏洞复现以及处理意见
2023企业微信0day漏洞复现以及处理意见 一、 漏洞概述二、 影响版本三、 漏洞复现小龙POC检测脚本: 四、 整改意见 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#x…...
【IMX6ULL驱动开发学习】04.应用程序和驱动程序数据传输和交互的4种方式:非阻塞、阻塞、POLL、异步通知
一、数据传输 1.1 APP和驱动 APP和驱动之间的数据访问是不能通过直接访问对方的内存地址来操作的,这里涉及Linux系统中的MMU(内存管理单元)。在驱动程序中通过这两个函数来获得APP和传给APP数据: copy_to_usercopy_from_user …...
day-21 代码随想录算法训练营(19)二叉树part07
530.二叉搜索树的最小绝对差 思路一:二叉搜索树的中序遍历必为升序数组,加入数组后计算相邻两个数差值,即可求出最小绝对差 思路二:同样的思路,中序遍历,直接使用指针记录上一个节点,同时更新…...
【Vue3】依赖注入
provide 和 inject 是 Vue.js 中用于实现依赖注入的两个关联功能。它们允许你在祖先组件中提供数据,然后在子孙组件中注入这些数据,实现组件之间的数据共享和传递。 provide:provide 是一个选项,你可以在父组件中通过它来提供数据…...
Vue 引入 Element-UI 组件库
Element-UI 官网地址:https://element.eleme.cn/#/zh-CN 完整引入:会将全部组件打包到项目中,导致项目过大,首次加载时间过长。 下载 Element-UI 一、打开项目,安装 Element-UI 组件库。 使用命令: npm …...
照耀国产的星火,再度上新!
国产之光,星火闪耀 ⭐ 新时代的星火⭐ 多模态能力⭐ 图像生成与虚拟人视频生成⭐ 音频生成与OCR笔记收藏⭐ 助手模式更新⭐ 插件能力⭐ 代码能力⭐ 写在最后 ⭐ 新时代的星火 在这个快速变革的时代,人工智能正迅猛地催生着前所未有的革命。从医疗到金融…...
大语言模型LLM的一些点
LLM发展史 GPT模型是一种自然语言处理模型,使用Transformer来预测下一个单词的概率分布,通过训练在大型文本语料库上学习到的语言模式来生成自然语言文本。 GPT-1(117亿参数),GPT-1有一定的泛化能力。能够用于和监督任务无关的任务中。GPT-2(…...
利用快马平台与免费Python源码,十分钟搭建个人博客原型
最近想快速验证一个个人博客的想法,但自己从头写代码太费时间。偶然发现InsCode(快马)平台这个神器,配合网上丰富的免费Python源码资源,居然十分钟就搭出了可运行的博客原型。记录下这个超高效的验证过程: 需求明确化 先梳理最基础…...
Polars 2.0清洗故障率下降92%的关键:schema-on-read预检 + 自定义error-handling策略(金融级数据治理标准)
第一章:Polars 2.0清洗故障率下降92%的关键洞察Polars 2.0 通过重构执行引擎与引入零拷贝数据验证机制,显著降低了ETL清洗阶段的运行时异常。核心改进在于将传统基于Python对象的列类型推断,替换为编译期静态Schema校验,并在LazyF…...
藏在滴滴里的AI神器,轻松叫到“梦中情车”
【潮汐商业评论/文】在一线城市上班的00后小杨是个重度打车用户,从她滴滴会员常年v8就可见对打车的依赖程度。她住在城市远郊,工作日的通勤或是周末的聚会,她总习惯提前叫好车,对于车型她也有着自己的“小偏好”,总结就…...
WorkshopDL:打破平台壁垒,让非Steam用户也能畅享创意工坊模组
WorkshopDL:打破平台壁垒,让非Steam用户也能畅享创意工坊模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 在当今数字游戏时代,模组&…...
Qwen3-VL宠物健康应用:症状图片识别部署案例
Qwen3-VL宠物健康应用:症状图片识别部署案例 1. 为什么用Qwen3-VL做宠物健康助手? 你有没有遇到过这样的情况:半夜发现猫咪耳朵发红、狗狗爪子肿胀,又不敢贸然带它去医院,想先查查可能是什么问题?翻遍养宠…...
WiFi CSI感知技术全攻略:从原理到实践的深度探索
WiFi CSI感知技术全攻略:从原理到实践的深度探索 【免费下载链接】Awesome-WiFi-CSI-Sensing A list of awesome papers and cool resources on WiFi CSI sensing. 项目地址: https://gitcode.com/gh_mirrors/aw/Awesome-WiFi-CSI-Sensing 一、技术原理&…...
Home Assistant ARM版在CasaOS上的完美配置指南(含时区设置技巧)
Home Assistant ARM版在CasaOS上的完美配置指南(含时区设置技巧) 对于智能家居爱好者来说,Home Assistant(HA)无疑是最强大的开源平台之一。而在ARM架构设备上运行HA,尤其是通过CasaOS这样的轻量级容器管理…...
ChatGLM3-6B-128K部署指南:Ollama环境配置避坑大全
ChatGLM3-6B-128K部署指南:Ollama环境配置避坑大全 本文面向需要处理长文本任务的开发者和研究者,手把手教你如何快速部署ChatGLM3-6B-128K模型,避开环境配置中的常见坑点。 1. 环境准备与快速部署 在开始部署之前,我们先简单了解…...
想转行做产品经理?看看你身上有没有这5个“隐藏技能”
在数字经济飞速发展的当下,产品经理早已不是互联网行业的“专属岗位”,而是横跨互联网、硬件、金融、制造业等多个领域的核心角色——连接用户需求与技术实现,主导产品从创意到落地的全流程,被称为“CEO的学前班”。正因如此&…...
2022 年 6 月青少年软编等考 C 语言一级真题解析
目录T1. 倒序输出思路分析T2. 平方差计算思路分析T3. 最小的数思路分析T4. 计算成绩优秀的人数思路分析T5. 开关灯思路分析T1. 倒序输出 题目链接:SOJ D1166 依次输入 444 个整数 aaa、bbb、ccc、ddd,将他们倒序输出,即依次输出 ddd、ccc、…...
