• Marker检测采用小觅相机,可以实时检测Marker的位置和姿态,效果如下:

  参考代码如下:

 #include "pch.h"

 #include <Eigen/Dense>
#include <opencv2/core.hpp>
#include <opencv2\highgui.hpp>
#include <opencv2\aruco.hpp>
#include <opencv2\aruco\dictionary.hpp>
#include <opencv2/calib3d.hpp>
#include <opencv2/core/eigen.hpp>
#include <opencv2/opencv.hpp> #include <mynteyed/camera.h>
#include <mynteyed/utils.h> #include <vector>
#include <iostream>
#include <Windows.h>
#include <fstream> using namespace std;
using namespace cv;
using namespace Eigen;
using namespace aruco; int main(int argc, char *argv[]) {
mynteyed::Camera cam;
mynteyed::DeviceInfo dev_info;
if (!mynteyed::util::select(cam, &dev_info)) {
return ;
}
mynteyed::util::print_stream_infos(cam, dev_info.index); std::cout << "Open device: " << dev_info.index << ", "
<< dev_info.name << std::endl << std::endl;
//设置相机的参数
mynteyed::OpenParams params(dev_info.index);
//params.depth_mode = mynteyed::DepthMode::DEPTH_GRAY;
//params.stream_mode = mynteyed::StreamMode::
params.stream_mode = mynteyed::StreamMode::STREAM_2560x720;
params.color_mode = mynteyed::ColorMode::COLOR_RECTIFIED;
//params.ir_intensity = 4;
params.framerate = ; cam.Open(params); Ptr<aruco::Dictionary> dictionary = aruco::getPredefinedDictionary(aruco::DICT_6X6_250);
Mat out;
dictionary->drawMarker(, , out, ); Ptr<aruco::DetectorParameters> detectorParams = aruco::DetectorParameters::create(); for (;;) {
auto Left_color = cam.GetStreamData(mynteyed::ImageType::IMAGE_LEFT_COLOR);
if (Left_color.img)
{
Mat image = Left_color.img->To(mynteyed::ImageFormat::COLOR_BGR)->ToMat();
Mat imageCopy;
//相机内参矩阵
const Mat intrinsic_matrix = (Mat_<float>(, )
<< 713.12554931640625000, 0.0, 634.99163818359375000, 0.0,
714.41278076171875000, 363.88098144531250000, 0.0, 0.0, 1.0); //畸变校正
const Mat arucodistCoeffs = (Mat_<float>(, ) << -0.29668807983398438, 0.07767868041992188,
0.00000000000000000, -0.00012969970703125,
0.00000000000000000);
vector< int > ids;
vector< vector< Point2f > > corners, rejected;
vector< Vec3d > rvecs, tvecs;
Mat R;
MatrixXd M(, );
// detect markers and estimate pose
detectMarkers(image, dictionary, corners, ids, detectorParams, rejected);//rejected拒绝的矩形区域
image.copyTo(imageCopy);
if (ids.size() > )
{
drawDetectedMarkers(imageCopy, corners, ids);
std::vector <cv::Vec3d> rvecs,tvecs;
estimatePoseSingleMarkers(corners,0.05, intrinsic_matrix, arucodistCoeffs, rvecs, tvecs);
//0.05为Marker的大小
Rodrigues(rvecs[], R, noArray());//罗德里格斯变换将旋转矩阵变为旋转向量
MatrixXd r(, );
VectorXd t();
VectorXd T_mm();
cv2eigen(R, r);
cv2eigen(tvecs[], t);
cv2eigen(tvecs[], T_mm);
T_mm = T_mm * ;
M(, ) = r(, ); M(, ) = r(, ); M(, ) = r(, ); M(, ) = t(, );
M(, ) = r(, ); M(, ) = r(, ); M(, ) = r(, ); M(, ) = t(, );
M(, ) = r(, ); M(, ) = r(, ); M(, ) = r(, ); M(, ) = t(, );
M(, ) = ; M(, ) = ; M(, ) = ; M(, ) = ; cout << "R :" << r << endl;
cout << "T :" << T_mm << endl; for (int i = ; i < ids.size(); i++)
{
cv::aruco::drawAxis(imageCopy, intrinsic_matrix, arucodistCoeffs, rvecs[i], tvecs[i], 0.05);
} } imshow("out", imageCopy);
char key = (char)waitKey();
if (key == ) break;
} }
return ;
}

OpenCV检测Marker位姿的更多相关文章

  1. 用 Python 和 OpenCV 检测图片上的条形码

      用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...

  2. 用 Python 和 OpenCV 检测图片上的条形码(转载)

    原文地址:http://python.jobbole.com/80448/ 假设我们要检测下图中的条形码: # load the image and convert it to grayscale 1 ...

  3. 利用OpenCV检测图像中的长方形画布或纸张并提取图像内容

    基于知乎上的一个答案.问题如下: 也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢 ...

  4. OpenCV检测人脸实例代码

    下面是使用OpenCV通过在硬盘中读入图像来对其进行Haar人脸检测的代码. //包含头文件 #include <opencv2/core/core.hpp> #include " ...

  5. 【转】opencv检测运动物体的基础_特征提取

    特征提取是计算机视觉和图像处理中的一个概念.它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征.特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点.连续的曲线或者连 ...

  6. 利用OpenCV检测手掌(palm)和拳头(fist)

    思路:利用训练好的palm.xml和fist.xml文件,用OpenCV的CascadeClassifier对每一帧图像检测palm和fist,之后对多帧中检测到的palm和fist进行聚类分组,满足 ...

  7. 用opencv检测人眼并定位瞳孔位置

    最近的研究要用到定位瞳孔的位置,所以上网搜了下相关的代码.总结如下: 1) 定位瞳孔可以直接使用opencv中的自带的分类器(haarcascade_eye_tree_eyeglasses.xml)来 ...

  8. (转)使用Python和OpenCV检测图像中的物体并将物体裁剪下来

    原文链接:https://blog.csdn.net/liqiancao/article/details/55670749 介绍 硕士阶段的毕设是关于昆虫图像分类的,代码写到一半,上周五导师又给我新的 ...

  9. 深入学习OpenCV检测及分割图像的目标区域

    准备1:OpenCV常用图片转换技巧 在进行计算机视觉模型训练前,我们经常会用到图像增强的技巧来获取更多的样本,但是有些深度学习框架中的方法对图像的变换方式可能并不满足我们的需求,所以掌握OpenCV ...

随机推荐

  1. 团队项目——Alpha1版本

    团队项目-Alpha版本发布1 一.格式描述 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience/ ...

  2. 每天玩转3分钟 MyBatis-Plus - 6. select 用法

    每天玩转3分钟 MyBatis-Plus - 1. 配置环境 每天玩转3分钟 MyBatis-Plus - 2. 普通查询 每天玩转3分钟 MyBatis-Plus - 3. 高级查询(一) 每天玩转 ...

  3. HanLP《自然语言处理入门》笔记--3.二元语法与中文分词

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 3. 二元语法与中文分词 上一章中我们实现了块儿不准的词典分词,词典分词无法消歧. ...

  4. MYSQL-innobackupex备份脚本

    自动化运维,是数据库管理员的不懈追求.目前出现了一些数据库自动管理平台,但出现时间较短,不够稳定.最常用的工具依然是shell脚本. 现在需要管理的某mysql数据库,数据量在800G,使用dump备 ...

  5. windows 通过AppInit加载任意dll

    windows操作系统允许将用户提供的dll加载到所有的进程的内存空间中.该功能可以用来做后门持久化.有点类似于linux的ld_preload环境变量.在进程启动的时候,操作系统会将用户提供的dll ...

  6. 文件类练习题(FileInputStream类)

    应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上.(被读取的文件路径为:d:/myjava/Hello.java 内容自己决定): pack ...

  7. list练习题—输入工人信息

    1) 创建一个List,在List 中增加三个工人,基本信息如下: 姓名 年龄 工资 zhang3 18 3000 li4 25 3500 wang5 22 3200 2) 在li4 之前插入一个工人 ...

  8. Harbor 1.9.x 版本从源码构建和运行

    介绍 本指南为开发人员提供了从源代码构建和运行Harbor的说明. 步骤1:为Harbor的构建环境做准备 Harbor被部署为多个Docker容器,并且大多数代码都是用Go语言编写的.构建环境需要D ...

  9. sql server如何判断数据库是否存在

    如何判断数据库是否存在       执行下列的SQL,获得一张表,根据表的行数来判断. select * from master..sysdatabases where name=N'所查询的数据库名 ...

  10. ubuntu 14.04 如何设置静态ip

    有线网络: 1. 找到文件并作如下修改: sudo vim /etc/network/interfaces 修改如下部分: auto eth0iface eth0 inet staticaddress ...