获取3D相机内外参

写在前面

  • 本人从事机器视觉细分的3D相机行业。编写此系列文章主要目的有:

    • 1、便利他人应用3D相机,本系列文章包含公司所出售相机的SDK的使用例程及详细注释;
    • 2、促进行业发展及交流。
  • 欢迎与我深入交流:微信号:liu_zhisensor

获取相机内外参及API说明

相机内外参说明

  • 知微传感Dkam系列3D相机允许用户获取镜头的畸变参数、内参和外参
  • 畸变参数、内参、外参的定义另请自主查询

相关API

  • GetCamInternelParameter 获取相机内参

    • int GetCamInternelParameter(int camera_cnt, float *Kc, float *K)
    • 函数功能: 获取相机内部参数
    • 参 数: camera_cn:CMOS 编号(0:红外 1:RGB); Kc:镜头畸变参数(K1,K2,P1,P2,K3)(K1,K2,K3为径向畸变参数,P1,P2为切向畸变参数);K:镜头的内参(fx,0,cx,0,fy,cy,0,0,1)
    • 返回值: 0:设置正常 非 0:设置失败
  • GetCamExternelParameter 获取相机外参
    • int GetCamExternelParameter(int camera_cnt, float *R, float *T)
    • 函数功能: 获取相机外部参数
    • 参 数: camera_cn:CMOS 编号(0:红外 1:RGB); R:当前镜头相对于红外镜头(点云)坐标系的旋转矩阵;T:当前镜头相对于红外镜头(点云)坐标系的平移向量
    • 返回值: 0:设置正常 非 0:设置失败

例程及注释

  • 本例程基于WIN10+VisualStudio2019+DkamSDK_1.6.71,采用C++语言
  • DkamSDK的配置方法请参考SDK说明书
  • 本例程在D132S型相机上验证
// GetParameter.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include <iostream>
#include <cstring>
//DkamSDK
#include"dkam_discovery.h"
#include"dkam_gige_camera.h"
#include"dkam_gige_stream.h"int main()
{std::cout << "Hello ZHIsensor!"<<std::endl;std::cout << "Hello liu_sensor!" << std::endl;std::vector<DiscoveryInfo> discovery_info;Discovery discovery;GigeCamera camera;GigeStream* pointgigestream = NULL;GigeStream* graygigestream = NULL;GigeStream* rgbgigestream = NULL;std::vector<DiscoveryInfo>().swap(discovery_info);//********************************************查询相机****************************************************//查询局域网内的3D相机int camer_num = discovery.DiscoverCamera(&discovery_info);std::cout << "局域网内共有" << camer_num << "台相机" << std::endl;//显示局域网内相机的IPfor (int i = 0; i < camer_num; i++){std::cout << "局域网内相机的IP为:" << discovery.ConvertIpIntToString(discovery_info[i].camera_ip) << std::endl;}//********************************************连接相机****************************************************//选定相机int k = -1;for (int i = 0; i < camer_num; i++){if (strcmp((discovery.ConvertIpIntToString(discovery_info[i].camera_ip)), "192.168.30.35") == 0){k = i;std::cout << "将连接第" << k + 1 << "台相机" << std::endl;}else{std::cout << "局域网内无该IP的相机" << std::endl;}}//********************************************获取内参****************************************************//连接相机int connect = camera.CameraConnect(&discovery_info[k]);if (connect == 0){std::cout << "成功连接相机" << std::endl;std::cout <<  std::endl;}else{std::cout << "连接相机失败,请检查!!!" << std::endl;}if (connect == 0){//相机内参float* kc = new float[5];float* kk = new float[9];//获取红外镜头内参std::cout << "获取红外镜头内参中……" << std::endl;int getInternelGray = camera.GetCamInternelParameter(0, kc, kk);if (getInternelGray == 0){std::cout << "红外镜头内参获取成功!" << std::endl;}else{std::cout << "红外镜头内参获取失败,请检查!!!" << std::endl;}std::cout << "红外镜头畸变参数为:" << std::endl;std::cout << "K1=" << kc[0] << std::endl;std::cout << "K2=" << kc[1] << std::endl;std::cout << "P1=" << kc[2] << std::endl;std::cout << "P2=" << kc[3] << std::endl;std::cout << "K3=" << kc[4] << std::endl;std::cout << "红外镜头内参为(按行输出):" << std::endl;for (int z = 0; z < 9; z++) {std::cout << "kk:" << kk[z] << std::endl;}std::cout << std::endl;//获取RGB镜头内参std::cout << "获取RGB镜头内参中……" << std::endl;int getInternelRGB = camera.GetCamInternelParameter(1, kc, kk);if (getInternelRGB == 0){std::cout << "RGB镜头内参获取成功!" << std::endl;}else{std::cout << "RGB镜头内参获取失败,请检查!!!" << std::endl;}std::cout << "RGB镜头畸变参数为:" << std::endl;std::cout << "K1=" << kc[0] << std::endl;std::cout << "K2=" << kc[1] << std::endl;std::cout << "P1=" << kc[2] << std::endl;std::cout << "P2=" << kc[3] << std::endl;std::cout << "K3=" << kc[4] << std::endl;std::cout << "RGB镜头内参为(按行输出):" << std::endl;for (int z = 0; z < 9; z++) {std::cout << "kk:" << kk[z] << std::endl;}std::cout << std::endl;//********************************************获取外参****************************************************//外参float* r = new float[9];float* t = new float[3];std::cout << "获取RGB镜头相对红外镜头的外参:" << std::endl;int getExternel = camera.GetCamExternelParameter(1, r, t);if (getExternel == 0){std::cout << "RGB镜头相对红外镜头的外参获取成功!" << std::endl;}else{std::cout << "RGB镜头相对红外镜头的外参获取失败,请检查!!!" << std::endl;}std::cout << "RGB镜头相对红外镜头的外参为(按行输出):" << std::endl;for (int j = 0; j < 9; j++) {std::cout << "R:" << r[j] << std::endl;}for (int z = 0; z < 3; z++) {std::cout << "T:" << t[z] << std::endl;}delete[]kc;delete[]kk;delete[]r;delete[]t;int disconnect = camera.CameraDisconnect();std::cout << "工作结束!!!!!!" << std::endl;}return(0);
}

运行结果

后记

  • 因为外参是以红外(点云)坐标系为参考,因此获取外参时只获取了RGB镜头的外参
  • 如有问题,欢迎与我深入交流:微信号:liu_zhisensor

知微传感Dkam系列3D相机SDK例程篇:获取内外参相关推荐

  1. 知微传感Dkam系列3D相机SDK例程篇:点云滤波

    3D相机点云滤波 写在前面 本人从事机器视觉细分的3D相机行业.编写此系列文章主要目的有: 1.便利他人应用3D相机,本系列文章包含公司所出售相机的SDK的使用例程及详细注释: 2.促进行业发展及交流 ...

  2. 知微传感Dkam系列3D相机SDK例程篇:配置相机曝光

    配置3D相机曝光 写在前面 本人从事机器视觉细分的3D相机行业.编写此系列文章主要目的有: 1.便利他人应用3D相机,本系列文章包含公司所出售相机的SDK的使用例程及详细注释: 2.促进行业发展及交流 ...

  3. 知微传感Dkam系列3D相机OpenCV应用篇:OpenCV读入3D相机数据

    OpenCV读入3D相机数据 写在前面 本人从事机器视觉细分的3D相机行业.编写此系列文章主要目的有: 1.便利他人应用3D相机,本系列文章包含公司所出售相机的SDK的使用例程及详细注释: 2.促进行 ...

  4. 知微传感Dkam系列3D相机PCL应用篇:PCL读入3D相机数据

    PCL读入Dkam系列3D相机数据 写在前面 PCL(Point Cloud Library):是一个开源的算法库,用C++编写,是当前点云处理的得力工具: 在使用PCL处理3D相机输出的点云中,可能 ...

  5. 知微传感3D相机SDK开发文档一查找相机

    知微传感3D相机SDK开发文档一查找相机 主要对知微传感3D相机的SDK文件做一个介绍,大家一个界面显示程序包含图像的获得,相机的查找和链接 查找相机,通过UDP广播形式查找局域网相机 链接相机,通过 ...

  6. 基于DLP结构光的双目3D相机

    基于结构光技术的Rindo系列3D相机非常适合用于微米级精度的检测和测量场景.结合专为结构光技术优化的工业投影仪,搭载工业立体相机,实现高分辨率高精度测量的同时拥有极高的测量稳定性.设计紧凑,标准化的 ...

  7. 3D视觉|了解下工业上常见的3D相机

    说起相机,大家估计都很熟悉了.那么相对于平常使用的2D相机,3D相机又有哪些区别呢,顾名思义,3D相机可以让我们获取我们物理世界的空间信息,即立体三维的物理信息.多了一个维度的信息,似乎打开了一扇大门 ...

  8. DALSA网口线扫相机SDK开发详解例程(C#版)

    首先吐槽一句,官方的demos写的真的不好,坑爹啊.对于小白来说,开发官方demos为我所用太难了.为什么呢?因为它Dalsa的DALSA.SaperaLT.SapClassBasic.dll中,不仅 ...

  9. python热成像_盘点Terabee传感器家族:TOF测距、3D相机、热成像

    了解Terabee Terabee公司2012年始创于法国,作为一家无人机服务公司,开发了基于无人机的先进数据获取和分析技术.Terabee采用LED而非激光飞行时间传感技术,树立了光学飞行时间传感的 ...

最新文章

  1. UVA 10494 - If We Were a Child Again(高精度除法和取余)
  2. BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)
  3. 传说中的CAFEBABE到底在哪儿?
  4. 处理项目重大质量问题的思路和原则
  5. C++访问权限与继承
  6. 5行代码AC——L1-029 是不是太胖了 (5分)
  7. console程序也有版本和图标
  8. 百度开发平台提交应用后进行官方认证审核失败?
  9. Vue插值文本换行问题
  10. 多台Linux服务器一起关机,linux – 一台服务器,两台APC UPS上的冗余电源:如何触发关机?...
  11. kuangbin专题-最短路练习
  12. 如何区分手机端 APP 是原生 APP 还是 H5?H5 和原生 APP 之间的区别
  13. Android NDK墓碑/崩溃分析
  14. python输出语句print格式_print输出语句的格式是什么?
  15. Linux克隆虚拟机
  16. Markdown Flow 画流程图详解
  17. django 声称图表_停止声称您正在使用无模式数据库
  18. 【推荐】一款好用的录音软件
  19. 金融术语学习【持续更新】
  20. 如何抓取各种网页上的图片

热门文章

  1. 微软宣布购买Lumia 950 XL将免费获得Lumia 950
  2. linux如何创建ppt文件,桌面应用|如何在 Ubuntu 和其他 Linux 发行版中创建照片幻灯片...
  3. 2018年互联网下一波红利
  4. html 文本框css样式,13种常用按钮、文本框、表单等CSS样式
  5. Windows 10的时间轴是什么,如何使用?
  6. IT采购,不再默默扛下“背刺”
  7. NVIDIA Drive PX2 使用笔记
  8. dsp6455的emifa模块_C6000系列之C6455 DSP的EMIFA接口
  9. 锤子手机安装 linux,1.认识Linux并创建虚拟机来安装CentOS7
  10. 力扣404. 左叶子之和