相机投影过程(码—基于Opencv)
理论知识参考于基于图像的三维重建-针孔相机模型
#include<iostream>
#include<opencv2/imgproc/types_c.h>class Camera
{public://构造函数Camera(){//采用归一化坐标,不考虑图像尺寸c_[0] = c_[1] = 0.0;}//相机投影过程cv::Point2d projection(cv::Point3d const &p3d){cv::Point2d p;//世界坐标系到相机坐标系double xc = R_[0] * p3d.x + R_[1] * p3d.y + R_[2] * p3d.z + t_[0];double yc = R_[3] * p3d.x + R_[4] * p3d.y + R_[5] * p3d.z + t_[1];double zc = R_[6] * p3d.x + R_[7] * p3d.y + R_[8] * p3d.z + t_[2];//相机坐标系到像平面double x = xc / zc;double y = yc / zc;//径向畸变过程double r2 = x * x + y * y;double distort_ratio = 1 + dist_[0] * r2 + dist_[1] * r2*r2;//图像坐标系到屏幕坐标系p.x = f_ * distort_ratio*x + c_[0];p.y = f_ * distort_ratio*y + c_[1];return p;}//相机在世界坐标系中的位置 -R^T*tcv::Point3d pos_in_world(){cv::Point3d pos;pos.x = R_[0] * t_[0] + R_[3] * t_[1] + R_[6] * t_[2];pos.y = R_[1] * t_[0] + R_[4] * t_[1] + R_[7] * t_[2];pos.z = R_[2] * t_[0] + R_[5] * t_[1] + R_[8] * t_[2];return -pos;}//相机在世界坐标系中的方向cv::Point3d dir_in_world(){cv::Point3d dir(R_[6], R_[7], R_[8]);return dir;}public://焦距fdouble f_;//径向畸变系数k1,k2double dist_[2];//中心点坐标u0,v0;double c_[2];//旋转矩阵double R_[9];//平移向量double t_[3];
};int main()
{Camera cam;//旋转矩阵cam.R_[0] = 0.999796; cam.R_[1] = -0.0127375; cam.R_[2] = 0.0156807;cam.R_[3] = 0.0128557; cam.R_[4] = 0.999894; cam.R_[5] = -0.0073718;cam.R_[6] = -0.0155846; cam.R_[7] = 0.00757181; cam.R_[8] = 0.999854;//焦距cam.f_ = 0.920227;// 径向畸变系数cam.dist_[0] = -0.106599; cam.dist_[1] = 0.104385;// 平移向量cam.t_[0] = 0.0814358; cam.t_[1] = 0.937498; cam.t_[2] = -0.0887441;// 三维点坐标cv::Point3d p3d = { 1.36939, -1.17123, 7.04869 };/*计算相机的投影点*/cv::Point2d p2d = cam.projection(p3d);std::cout << "projection coord:\n " << p2d << std::endl;std::cout << "result should be:\n 0.208188 -0.035398\n\n";/*计算相机在世界坐标系中的位置*/cv::Point3d pos = cam.pos_in_world();std::cout << "cam position in world is:\n " << pos << std::endl;std::cout << "result should be: \n -0.0948544 -0.935689 0.0943652\n\n";/*计算相机在世界坐标系中的方向*/cv::Point3d dir = cam.dir_in_world();std::cout << "cam direction in world is:\n " << dir << std::endl;std::cout << "result should be: \n -0.0155846 0.00757181 0.999854\n";return 0;
}
相机投影过程(码—基于Opencv)相关推荐
- 鱼眼相机成像模型以及基于OpenCV标定鱼眼镜头(C++)
opencv系列 文章目录 opencv系列 一.鱼眼镜头模型 二.投影函数 等距投影模型 等立体角投影模型 正交投影模型 体视投影模型 三.OpenCV中的鱼眼相机模型 四.标定(C++)实现 使用 ...
- 纯手码 | 基于OpenCV的车牌识别(Sobel、颜色定位),绝对实用
车牌识别大体上需要经历过Sobel定位.颜色定位.SVM对定位来的候选车牌进行评测,给出评分,最后通过提取HOG特征按照训练模型进入ANN识别. 这一章节介绍 定位相关的逻辑代码,其中定位用到 Sob ...
- OpenCV 相机校正过程中,calibrateCamera函数projectPoints函数的重投影误差的分析
OpenCV 校正过程中,calibrateCamera函数的ret和重投影误差的分析 OpenCV对相机进行校正的过程中,校正返回值retval和重投影误差的计算公式表示和分析. OpenCV 校正 ...
- Python基于OpenCV的图像去雾算法[完整源码&部署教程]
1.图片识别 2.视频展示 [项目分享]Python基于OpenCV的图像去雾算法[完整源码&部署教程]_哔哩哔哩_bilibili 3.算法原理 图像增强算法常见于对图像的亮度.对比度.饱和 ...
- opencv已知相机投影及内参求外参_一步步用c++实现相机标定(张氏标定法)
enazoe/camera_calibration_cppgithub.com 前言 最近在做相机标定方面的工作,虽然以前多次进行相机标定,但是多数时候是调用opencv的函数,过程相对简单.虽然对 ...
- 基于Opencv的车距检测系统(源码&教程)
1.研究背景 对本车前方车辆的识别及距离检测是计算机视觉技术在智能网联汽车中的一个重要内容.要想在错综繁杂的交通环境中实现无人驾驶,对行车环境中其他车辆信息的获取是十分重要的.因此,对本车前方车辆的识 ...
- android opencv 获取小图在大图的坐标_Android开发—基于OpenCV实现相机实时图像识别跟踪...
利用OpenCV实现实时图像识别和图像跟踪 图像识别 什么是图像识别 图像识别,是指利用计算机对图像进行处理.分析和理解,以识别各种不同模式的目标和对像的技术.根据观测到的图像,对其中的物体分辨其类别 ...
- 基于OpenCV实现简单人脸面具、眼镜、胡须、鼻子特效(详细步骤 + 源码)
点击下方卡片,关注"OpenCV与AI深度学习"公众号! 视觉/图像重磅干货,第一时间送达! 导读 本文给大家分享一个基于OpenCV实现简单人脸面具.眼镜.胡须.鼻子特效的实例, ...
- 在Ubuntu中用Qt基于OpenCV调用大恒相机
在Ubuntu中用Qt基于OpenCV调用大恒相机 前言 视觉萌新买了工业相机却不会用,上网也查不到具体方法,没办法只能自己硬刚了.刚开始自己摸索,碰到好多问题解决不了,Qt报错不知道咋回事,缺少的链 ...
最新文章
- PrestaShop 网站后台配置(三)
- Spring Cloud——Spring Cloud Alibaba 2021 Nacos Config bootstrap 配置文件失效解决方案
- 【TensorFlow】——实现minist数据集分类的前向传播(常规神经网络非卷积神经网络)
- Nginx on Docker 配置
- 在应用程序中操作NorFlash
- 帮你理解vue的数据绑定的流程
- 使用rkhunter检测rootkit
- 计算机等级考试四级信息安全工程师
- ra8873 ST7789区别
- 破解电视盒 运营商送的,各种型号。通用 TTL 破解电视盒,更新华为悦盒
- 关于修改思科WLC SSID
- 关于unity3d多点触控的研究
- 学习java第20天
- 零基础学图形学(9) 几何知识——行向量和列向量
- html导航栏悬停过渡,JS 实现导航栏悬停效果
- 二极管结电容和反向恢复时间都是怎么来的
- 特征筛选:重要性评估
- 计算机在药店管理系统中的应用,计算机系统在药店管理系统中的应用(国外英语资料).doc...
- java hanoi塔问题_Hanoi塔问题 - 智障的个人空间 - OSCHINA - 中文开源技术交流社区...
- 金融行业为什么热衷于区块链技术?|智谷微报告
热门文章
- ape_api_key_锁定您的API_KEY以及为什么这很重要
- 链路,设备,带宽冗余技术
- 跟李宁老师学Python视频课程(19):Python GUI库:PyQt5-李宁-专题视频课程
- 2.4.3 码分复用
- 全国计算机2级考试试题,综合全国计算机考试文管2级模拟试题.doc
- cas cvm服务器虚拟化安装虚拟机,CAS系统如何安装虚拟机
- 建模方法(七)-中心化处理和标准化处理
- Vue监听手机滑动事件vue-touch
- Vue3 知识大总结(一)基础语法
- 王者荣耀中一个英雄是怎么产生的?