当前位置: 首页 > news >正文

网站建设实战上海cms建站模板

网站建设实战,上海cms建站模板,wordpress当前文章所属分类,一个具体网站的seo优化背景#xff1a;项目需要用到marker知识#xff0c;所以到官网上临时补一些知识。 概要#xff1a;主要介绍marker一些接口的含义#xff0c;纯属个人理解#xff0c;有误则希望大佬不吝赐教 1、 涉及ar码操作学习#xff0c;其头文件为#xff1a; #include op…背景项目需要用到marker知识所以到官网上临时补一些知识。 概要主要介绍marker一些接口的含义纯属个人理解有误则希望大佬不吝赐教 1、 涉及ar码操作学习其头文件为 #include opencv2/aruco.hpp1创建marker cv::Mat markerImage; cv::Ptrcv::aruco::Dictionary dictionary cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250); cv::aruco::drawMarker(dictionary, 23, 200, markerImage, 1); cv::imwrite(marker23.png, markerImage);参数1 dictionary 表示marker字典类型为DICT_6X6_250使用构造函数进行创建 参数2: 23 表示准备绘制的ar码在该字典里面的编号id为23 参数3 200 表示输出ar码图片像素为200x200 参数4 markerImage 保存的是输出ar图片dictionary表示的是marker数据集可以参考 const char* keys {outfile |none | Output image }{d | | dictionary: DICT_4X4_500, DICT_4X4_1001, DICT_4X4_2502,DICT_4X4_10003, DICT_5X5_504, DICT_5X5_1005, DICT_5X5_2506, DICT_5X5_10007, DICT_6X6_508, DICT_6X6_1009, DICT_6X6_25010, DICT_6X6_100011, DICT_7X7_5012,DICT_7X7_10013, DICT_7X7_25014, DICT_7X7_100015, DICT_ARUCO_ORIGINAL 16}{cd | | Input file with custom dictionary }{id | | Marker id in the dictionary }{ms | 200 | Marker size in pixels }{bb | 1 | Number of bits in marker borders }{si | false | show generated image }; }2marker检测函数detectMarkers()解析 cv::Mat inputImage; ... std::vectorint markerIds; std::vectorstd::vectorcv::Point2f markerCorners, rejectedCandidates; cv::Ptrcv::aruco::DetectorParameters parameters cv::aruco::DetectorParameters::create(); cv::Ptrcv::aruco::Dictionary dictionary cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250); cv::aruco::detectMarkers(inputImage, dictionary, markerCorners, markerIds, parameters, rejectedCandidates);参数1 inputImage 表示包含 ar码marker的图片 参数2 dictionary 表示ar码来自哪个字典类型 参数3 markerCorners 该容器作用是保存的是检测出来的ar码参数4 markerIds 作用记录检测出来的ar码存储在markerCorners在字典中的编号 参数5 parameters DetectorParameters类的实例化对象其包含了检测ar码过程所涉及的所有自定义的参数 参数6 rejectedCandidates 保存没有检测出来有效的ar码 marker参考https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html 3绘制marker框框 drawDetectedMarkers() 在上一步骤检出ar码后下一步检测是否真的检查正确这时候需要使用绘制marker框框来验证此时可使用函数drawDetectedMarkers() cv::Mat outputImage inputImage.clone(); cv::aruco::drawDetectedMarkers(outputImage, markerCorners, markerIds);参数1 outputImage 表示输入的图片 参数2 markerCorners 来自detectMarkers()函数获取得到保存了ar码容器 参数3 markerIds 来自detectMarkers()函数获取的记录检测出来的ar码存储在markerCorners的ar码在字典中的编号参考https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html 4姿态信息函数estimatePoseSingleMarkers 在检测校验检测出来的ar码之后我们需要做的是从ar码里面获取对应的姿态信息姿态信息函数estimatePoseSingleMarkers cv::Mat cameraMatrix, distCoeffs; // You can read camera parameters from tutorial_camera_params.yml readCameraParameters(filename, cameraMatrix, distCoeffs); // This function is located in detect_markers.cpp std::vectorcv::Vec3d rvecs, tvecs; cv::aruco::estimatePoseSingleMarkers(markerCorners, 0.05, cameraMatrix, distCoeffs, rvecs, tvecs);参数1: markerCorners 来自detectMarkers()函数意义为存储检测出来的ar码 参数2 0.05 ar码的尺寸单位一般为米也可以为其他单位如mm注意尺寸单位和姿态估计变换矩阵单位一致 参数3 cameraMatrix 相机内参 参数4 distCoeffs 相机畸变参数 参数5 rvecs 该容器保存的是markerCorners里面每个ar的旋转信息 参数6 tvecs 该容器保存的是markerCorners里面每个ar的平移信息相机内参和畸变参数可以查看https://blog.csdn.net/weixin_43206570/article/details/84797361 5打印姿态信息cv::drawFrameAxes() 姿态信息获取后可以打印出检验出来的姿态信息进行校验参考函数cv::drawFrameAxes() inputImage.copyTo(outputImage); for (int i 0; i rvecs.size(); i) { auto rvec rvecs[i]; auto tvec tvecs[i]; cv::drawFrameAxes(outputImage, cameraMatrix, distCoeffs, rvec, tvec, 0.1); }参数1 outputImage 绘制ar码的图片 参数2 cameraMatrix 相机内参 参数3 distCoeffs 相机畸变参数 参数4 rvec 该容器保存的是markerCorners里面每个ar的旋转信息 参数5 tvecs 该容器保存的是markerCorners里面每个ar的平移信息 参数6 0.1 轴线长度单位同rvec、tvecs一般为米以下为一个简单ar码从检测到姿态估计的完整过程 cv::VideoCapture inputVideo; inputVideo.open(0); cv::Mat cameraMatrix, distCoeffs; // You can read camera parameters from tutorial_camera_params.yml读取相机参数 readCameraParameters(filename, cameraMatrix, distCoeffs); // This function is located in detect_markers.cpp cv::Ptrcv::aruco::Dictionary dictionary cv::aruco::getPredefinedDictionary(cv::aruco::DICT_6X6_250); while (inputVideo.grab()) { cv::Mat image, imageCopy; inputVideo.retrieve(image); image.copyTo(imageCopy); std::vectorint ids; std::vectorstd::vectorcv::Point2f corners; //检测 cv::aruco::detectMarkers(image, dictionary, corners, ids); // if at least one marker detected if (ids.size() 0) { cv::aruco::drawDetectedMarkers(imageCopy, corners, ids);//绘制检测框 std::vectorcv::Vec3d rvecs, tvecs; cv::aruco::estimatePoseSingleMarkers(corners, 0.05, cameraMatrix, distCoeffs, rvecs, tvecs);//姿态估计 // draw axis for each marker for(int i0; iids.size(); i) cv::drawFrameAxes(imageCopy, cameraMatrix, distCoeffs, rvecs[i], tvecs[i], 0.1);//绘制姿态 } cv::imshow(out, imageCopy);//显示图片 char key (char) cv::waitKey(waitTime); if (key 27) break; }其他内容为解析一些自定义检测过程参数事情后续想要学习可以打开链接加以学习 参考https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html 2、利用ar 码集注意跟上一节的单个ar码检测到姿态估计区别进行姿态估计 单独检测一个ar码和 board 码检测的区别board码可以知道各个ar码之间的相对位置而单独ar码不知也就是有一个先验值。 boards好处 姿态估计更加丰富获取的姿态更加准确 1头文件 #include opencv2/aruco.hpp2Board类 class Board { public: std::vectorstd::vectorcv::Point3f objPoints; cv::Ptrcv::aruco::Dictionary dictionary; std::vectorint ids; };参数1 objPoints 角点位置列表就是存储所有ar码四个角点位置信息 参数2 dictionary 表示board上面使用的ar码归属字典 参数3 ids 存储的是objPoints 里面的ar码对应在字典里面的编号 参考https://docs.opencv.org/4.x/d5/dae/tutorial_aruco_detection.html 3Board detection 板检测和marker检测类似唯一差别在于姿态估计上。板在board姿态估计之前务必进行一次marker检测 cv::Mat inputImage; // camera parameters are read from somewhere cv::Mat cameraMatrix, distCoeffs; //相机的内参、相机畸变参数 // You can read camera parameters from tutorial_camera_params.yml readCameraParameters(filename, cameraMatrix, distCoeffs); // This function is located in detect_board.cpp // assume we have a function to create the board object cv::Ptrcv::aruco::Board board cv::aruco::Board::create(); ... std::vectorint markerIds;//ar码在字典中的编号对应markerCorners中ar码 std::vectorstd::vectorcv::Point2f markerCorners;// 所有ar码 cv::aruco::detectMarkers(inputImage, board.dictionary, markerCorners, markerIds); // if at least one marker detected if(markerIds.size() 0) { cv::Vec3d rvec, tvec; int valid cv::aruco::estimatePoseBoard(markerCorners, markerIds, board, cameraMatrix, distCoeffs, rvec, tvec); }参数1 markerCorners 存储的是板上的ar码 参数2 markerIds 存储的是存储ar码在字典中的编号 参数3 board 记录板的布局和ar码的id 参数4 cameraMatrix 相机内参 参数5 distCoeffs 相机畸变参数 参数6 rvec 板的旋转姿态估计 参数7 tvec 板的平移姿态估计注意一个点markerCorners和markerIds存储的并非所有检测到的ar信息而是在存储在Board::ids里面给到的ar编号所属信息。 参考https://docs.opencv.org/4.x/db/da9/tutorial_aruco_board_detection.html 3、延伸 marker可以提供一些姿态信息比如我想直到图像里面的某个平面的姿态信息那么我们可以给平面贴上一些marker构造board调用opencv接口可以返回变换矩阵信息那么我们根据预设的board信息就可以直到某个平面的姿态信息。 ##################### 不积硅步无以至千里 好记性不如烂笔头 觉得nice记得点赞收藏
http://www.laogonggong.com/news/124627.html

相关文章:

  • 网站建设微金手指下拉15汕头网站制作设计
  • js网站分页怎么做网站建设最好用什么语言
  • 三台网站seo自己做网站商城需要营业执照吗
  • 网站优化自己做该怎么做什么是sem
  • 网站搭建合作协议wordpress文章more插件
  • 企业手机端网站源码东莞整站优化公司火速公司
  • 东莞网站设计知名乐云seo手机上免费做ppt的软件
  • 建站优化一条龙帝国手机网站怎么做
  • 苏州seo网站管理免费h5模板网站
  • 西安网站制作流程4399小游戏网站入口
  • 体育馆做网站公司app制作开发报价
  • 优秀网站建设哪家好网页游戏平台十大排名
  • 网站空间租用续费服务合同企业展厅公司哪家好
  • 百度免费网站怎样建设软文写作的十大技巧
  • 阿里云万网域名郑州做网站优化价格
  • 做网站如何自己寻找客户洗头竖鞋带名片改良授权做网站不贵
  • 旅游网站建设翻译受欢迎的做pc端网站
  • 如何说服别人做网站wordpress 兼容php7
  • 做网站送企业邮箱机关网站建设建议
  • wordpress开启多站点功织梦网站2个模型
  • 微信公众号网站制作东莞网站优化费用
  • 网站功能报价明细表wordpress 插件编写
  • 防做网站视频网站名是什么
  • 假山网站建设网站运营维护中需要用到什么服务器
  • 创建官方网站高端定制网站设计公司
  • 北京市优化网站影院wordpress
  • 俄语网站叫什么yandex小程序开发教程ppt
  • 赤峰浩诚网站建设公司商业信息
  • 与建设部网站招工 最新招聘信息
  • 网站制作费用低网站建设佰金手指科杰二五