• 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. SpringBoot中对SpringMVC的自动配置

    https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#boot-features-developin ...

  2. Docker在树莓派的安装与使用(Ubuntu Arm Server v19.10)

    最近由于冠状病毒疫情的原因,只能够和小朋友家里蹲.这几天把尘封已久的那个树莓派拿出来继续捣鼓.希望能够做一个异构的分布式系统框架,于是想把Docker也安装到树莓派上,以便后期做进一步的开发和实验. ...

  3. robotframework,移动端(小程序)自动化,通过屏幕坐标点击对应按钮的方法

    使用场景: 下图通过常规方法是定位不到“红色”这个按钮的 我们把鼠标放置上去,下图右侧会显示该点的坐标地址 然后使用click a point指令定位 click a point 64 743 dur ...

  4. 一次完整的OCR实践记录

    一.任务介绍 这次的任务是对两百余张图片里面特定的编号进行识别,涉及保密的原因,这里就不能粘贴出具体的图片了,下面粘贴出一张类似需要识别的图片. 假如说我的数据源如上图所示,那么我需要做的工作就是将上 ...

  5. 命令行下使用RAR和7-Zip压缩数据

    3.6.1 RAR Winrar的命令行模式程序在安装目录下的 rar.exe (打包压缩程序),unrar.exe(解压缩程序) WinRAR的常用参数如下: -a 添加文件到压缩文件 -k 锁定压 ...

  6. Exception | java.security.NoSuchProviderException: no such provider: BC

    背景 今天在用PGP key做JWT签名和验签的时候,转换报了如下错误: org.bouncycastle.openpgp.PGPException: exception on setup: java ...

  7. 文件系统(02):基于SpringBoot框架,管理Xml和CSV文件类型

    本文源码:GitHub·点这里 || GitEE·点这里 一.文档类型简介 1.XML文档 XML是可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言.标记指计算机所能理解的信息符号,通过 ...

  8. LoadIcon的使用

    LoadIcon msdn: Loads the specified icon resource from the executable (.exe) file associated with an ...

  9. HDU_1394_线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=1394 线段树入门题,每次读入一个数,就寻找在树中比它大的值的个数,然后更新树,把个数相加就是逆序数,每移动一个数 ...

  10. asp.net core系列 WebAPI 作者:懒懒的程序员一枚

    asp.net core系列 36 WebAPI 搭建详细示例一.概述1.1 创建web项目1.2 添加模型类1.3 添加数据库上下文1.4 注册上下文1.5 添加控制器1.6 添加Get方法1.7 ...