• 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. 19_07_8校内训练[sort]

    题意 一个排列,每次选一个子序列按顺序放在开头,要求变成升序的操作次数不超过17次,给出方案.n<=1E5. 思考 对于ai=aj-1且i<j的数字,一定要保持其相对顺序.可以根据这个关系 ...

  2. epel-release的卸载重装

    1.yum remove epel-release 2.清空epel目录:rm -rf /var/cache/yum/x86_64/6/epel/ 3.安装,yum install  epel-rel ...

  3. flask插件全家桶集成学习---持续更新ing

    不得不说flask的设计要比django要小巧精妙的多了,没有那么臃肿,只保留核心功能,其他的都需要自己引入,即各种各样的插件来满足我们的需求,我这里记录一下自己学习项目中用的插件使用方法和一些技巧总 ...

  4. 4、Oracle 数据库 startup 报错:ORA-27102: out of memory

    1.数据库启动报错: ORA-: out of memory SQL> startup pfile='/db/oracle/init.ora'; ORA-: out of memory Linu ...

  5. Java并发编程(一):线程基础知识以及synchronized关键字

    1.线程与多线程的概念:在一个程序中,能够独立运行的程序片段叫作“线程”(Thread).多线程(multithreading)是指从软件或者硬件上实现多个线程并发执行的技术. 2.多线程的意义:多线 ...

  6. [求解!!!] springboot在运行web项目时报错

    2017-05-10 17:40:54.343 INFO 4852 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing ...

  7. python笔记16

    1.今日内容 模块基础知识 time/datetime json/picle shutil logging 其他 2.内容回顾和补充 2.1模块(类库) 内置 第三方 自定义 面试题: 列举常用内置模 ...

  8. POJ_2185_二维KMP

    http://poj.org/problem?id=2185 求最小覆盖矩阵,把KMP扩展到二维,行一次,列一次,取最小覆盖线段相乘即可. #include<iostream> #incl ...

  9. HDU_1506_单调栈

    http://acm.hdu.edu.cn/showproblem.php?pid=1506 从栈底到栈顶从小到大排序,碰到比栈定小的元素,出栈处理,直到栈顶比元素小或者栈为空. 数组最后多加了个-1 ...

  10. 菜鸡发现腾讯视频bug

    腾讯视频bug 我看一个将夜,出现三生三世? 这是为啥? 发现bug,会得到奖励吗? 不会像dnf一样游戏自己的bug,然后出现伤害999,把我号封了. 我这样会被封号吗?我应该怎么做才不会被封?好慌 ...