利用OPENCV,已知内参标定外参

#include <opencv2/calib3d.hpp>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <fstream>
using namespace std;
using namespace cv;
int main() {//相机内参矩阵Mat cameraMatrix = Mat::eye(3, 3, CV_64F);cameraMatrix.at<double>(0, 0) = 1505.891829;cameraMatrix.at<double>(0, 1) = 0;cameraMatrix.at<double>(0, 2) = 973.395;cameraMatrix.at<double>(1, 1) = 1505.843003;cameraMatrix.at<double>(1, 2) = 597.616;cameraMatrix.at<double>(2, 2) = 1;//相机畸变系数Mat distCoeffs = Mat::zeros(5, 1, CV_64F);distCoeffs.at<double>(0, 0) = 0.0019057;distCoeffs.at<double>(1, 0) = 0;distCoeffs.at<double>(2, 0) = 0;distCoeffs.at<double>(3, 0) = 0;distCoeffs.at<double>(4, 0) = 0;//将控制点在世界坐标系的坐标压入容器vector<Point3f> objP;objP.clear();objP.push_back(Point3f(0, 4, 0));objP.push_back(Point3f(110, 65, 0));objP.push_back(Point3f(220, 4, 0));objP.push_back(Point3f(220, 176, 0));objP.push_back(Point3f(110, 115, 0));objP.push_back(Point3f(0, 176, 0));//6objP.push_back(Point3f(110, 0, 0));objP.push_back(Point3f(110, 180, 0));//8objP.push_back(Point3f(220, 50, 0));objP.push_back(Point3f(220, 130, 0));objP.push_back(Point3f(0, 130, 0));objP.push_back(Point3f(0, 50, 0));//12//将之前已经检测到的角点的坐标压入容器std::vector<Point2f> points;points.clear();points.push_back(Point2f(309, 43));points.push_back(Point2f(922, 401));points.push_back(Point2f(1595, 46));points.push_back(Point2f(1558, 1077));points.push_back(Point2f(915, 703));points.push_back(Point2f(301, 1016));//6points.push_back(Point2f(932, 13));points.push_back(Point2f(909, 1076));//8points.push_back(Point2f(1591, 320));points.push_back(Point2f(1576, 805));points.push_back(Point2f(296, 763));points.push_back(Point2f(300, 305));//12//因为坐标系的原因可能要手动镜像//for (int i = 0; i < points.size(); i++)//{//    /*int j = points[i].x;//    points[i].x = points[i].y;*///    points[i].y =  1200- points[i].y;//}//创建旋转矩阵和平移矩阵Mat rvecs = Mat::zeros(3, 1, CV_64FC1);Mat tvecs = Mat::zeros(3, 1, CV_64FC1);//求解pnp//solvePnP(objP, points, cameraMatrix, distCoeffs, rvecs, tvecs);solvePnPRansac(objP, points, cameraMatrix, distCoeffs, rvecs, tvecs);Mat rotM = Mat::eye(3, 3, CV_64F);Mat rotT = Mat::eye(3, 3, CV_64F);Rodrigues(rvecs, rotM);  //将旋转向量变换成旋转矩阵Rodrigues(tvecs, rotT);//计算相机旋转角double theta_x, theta_y, theta_z;double PI = 3.1415926;theta_x = atan2(rotM.at<double>(2, 1), rotM.at<double>(2, 2));theta_y = atan2(-rotM.at<double>(2, 0),sqrt(rotM.at<double>(2, 1) * rotM.at<double>(2, 1) + rotM.at<double>(2, 2) * rotM.at<double>(2, 2)));theta_z = atan2(rotM.at<double>(1, 0), rotM.at<double>(0, 0));theta_x = theta_x * (180 / PI);theta_y = theta_y * (180 / PI);theta_z = theta_z * (180 / PI);//计算深度Mat P;P = (rotM.t()) * tvecs;//输出cout << "角度" << endl;cout << theta_x << endl;cout << theta_y << endl;cout << theta_z << endl;cout << P << endl;return 0;
}

OPENCV已知内参求外参相关推荐

  1. opencv已知相机投影及内参求外参_一步步用c++实现相机标定(张氏标定法)

    enazoe/camera_calibration_cpp​github.com 前言 最近在做相机标定方面的工作,虽然以前多次进行相机标定,但是多数时候是调用opencv的函数,过程相对简单.虽然对 ...

  2. (九)相机内参、外参、反透视变换python opencv

    背景知识 任务需求:将相机上的一个点投影到真实世界平面上去. 原则上单目相机是不可以的,因为只记录了二维信息,真实世界是三维的,双目相机可以通过视差,或者单目+IMU组合,但是由于特征点在地面上的先验 ...

  3. 内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangdashi888/article/details/51356385 1. 相机参数是三种不同的 ...

  4. 计算机视觉(相机标定;内参;外参;畸变系数)

    目录 一.预备知识 1.坐标系变换过程(相机成像过程) (1)相机坐标系转换为图像坐标系(透视投影变换遵循的是针孔成像原理) (2)齐次坐标的引入原因:(为什么引入齐次坐标???) 2.内参与外参矩阵 ...

  5. 相机校正与相机内参、外参

    简 介: 对于相机进行校正,是为之后视觉测量奠定基础.本文在总结了相机校正中的基本概念.使用cv2的函数说明校正的过程. 关键词: 相机校正,内参,外参 #mermaid-svg-0bogxxocrI ...

  6. 使用ros标定相机的内参和外参

    使用ros标定相机的内参和外参 1 安装依赖 2 运行标定节点 2.1 rocore 2.2 启动摄像头驱动程序 2.3 加载将要标定的图像主题 3 开始标定 3.1 打印一张棋盘格图片 3.2 具体 ...

  7. 已知坐标求方位角_【干货】RTK视频实操 | 求转换参数详解和七点注意事项!

    RTK视频教学,『求转换参数』,技术员结合测量一线实操经验,运用工程之星5.0软件为大家讲解如何求转换参数,以及求转换参数需要注意哪些事项. 求转换参数操作 通常情况下,科力达工程之星直接输出的坐标为 ...

  8. Realsense d435i内参、外参标定

    使用工具code_utils.imu_utils.kalibr对Realsense d435i 内参.外参标定.本文介绍上述工具的安装,及标定方法. 一.code_utils安装 1.建立工作空间 m ...

  9. ros --- 双目相机内参与外参标定

    ros --- 双目相机内参与外参标定 小觅相机直接获取参数 手动重新标定 1. 双目相机内外参标定 生成标定板 录制 stereo_calibra.bag 标定 标定结果 标定验证 2. 双目 + ...

最新文章

  1. 分支结构,循环结构,for循环,九九乘法表
  2. Angular jasmine returnValue方法的实现原理
  3. HTML5+CSS+JQuery 实现简单的进度条功能
  4. 【数据结构】堆的建立(边输入数据边建立)(给定数字顺序插入)
  5. ssh网络服务的搭建和配置
  6. java接口压力测试
  7. linux系统服务器关机命令,linux系统中有哪些关机命令
  8. 图像生成质量fid、inception score、KID计算
  9. 怎样让机器有人类思维
  10. python自学课堂_python自学——列表
  11. iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destinatio
  12. android波纹动画,Android实现水波纹特效
  13. 量化交易系统设计细节
  14. 带你一文搞懂VMware Workstation的三种网络模式
  15. C语言实现斐波那契数列的几种方法
  16. 2016年十大黑客工具
  17. 通信工程与计算机考研学校排名,通信工程专业考研学校排名
  18. 30万条弹幕大军都推荐你去看的《山海情》,是怎样一部最搞笑最土味的扶贫剧
  19. 玩转Python :获取微信好友个性签名生成词云
  20. ulua proto配置

热门文章

  1. 移动开发—HTML5 or Native?
  2. Ubuntu系统(七)-安装FTP
  3. 刚刚写了一个评星的脚本插件,分享给大家
  4. Android开发历程_18(XML文件解析)
  5. 组策略的优先级是 本地》站点》域》组织单位
  6. Ogre貌似开始推荐MYGUI了~~
  7. Java项目:基于Jsp实现网上定餐系统
  8. 基于Springboot开发的家庭财务管理系统
  9. Tableau 绘制折线图
  10. ADO.NET Entity Framework 简介