• 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. 20191211 HNOI2017 模拟赛 问题A

    题目: 分析: 好难好难... 下来听神仙讲.. 每一个长度为n-2的prufer序列一一对应一棵大小为n的树... 每个点在序列中的出现次数为该点的度数减一 哦??? ... 哦... prufer ...

  2. git使用的常见命令汇总

    git的简单介绍 git是分布式版本控制工具 git 的基本操作指令 git init 初始化git仓库 git add 文件名 git add . 把文件 添加到 git 暂存区中 git stat ...

  3. linux系统iot平台编程阶段总结

    1.inline内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗. 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数. 在使用循 ...

  4. PlayCanvas PBR材质shader代码分析(vertex shader)

    顶点shader主要对顶点坐标变换,将顶点坐标从local->world->view->clip 空间变换 local空间:模型物体坐标系 world空间:世界空间坐标系 view空 ...

  5. tarjan缩点练习 洛谷P3387 【模板】缩点+poj 2186 Popular Cows

    缩点练习 洛谷 P3387 [模板]缩点 缩点 解题思路: 都说是模板了...先缩点把有环图转换成DAG 然后拓扑排序即可 #include <bits/stdc++.h> using n ...

  6. Docker基础内容之容器

    前言 容器是独立运行的一个或一组应用以及它们的运行态环境. 相关命令 启动容器相关命令 docker run 运行一个ubuntu14.04版本的容器,如果这个镜像本地不存在则会去默认仓库中下载 do ...

  7. 转载---class文件中的字段表集合--field字段在class文件中是怎样组织的

    写的太好了! https://blog.51cto.com/1459294/1932331

  8. ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)

    本文转自:自己的微信公众号<集成电路设计及EDA教程> <ICC教程 - Flow系列 - 概念系列 - ECO (理论+实践+脚本分享)> 这篇推文讲一下数字IC设计中的po ...

  9. ubuntu 安装LAMP web 服务器, phpmyadmin 安装后无法打开解决

    安装方法: http://blog.chinaunix.net/uid-26495963-id-3173291.html 在上述文档中需要增加apache 支持mysql 功能. apt-get in ...

  10. Git的指令

    一,访问本地Git 上一节我们已学会了如何注册GitHub和安装Git 现在先打开电脑终端或Git Bash,首先和Git打个招呼,输入Git 二.新建文件/进入文件夹 mkdir + 文件名    ...