基于pnp解算的距离角度读取,完整代码如下,小白不懂有错请联系我,马上去改

#include <opencv2/opencv.hpp> //头文件
#include <opencv2/imgproc/imgproc.hpp>
#include
using namespace cv; //包含cv命名空间
using namespace std;
Mat getfram(VideoCapture capture)
{
Mat frame;
do {capture>>frame;}
while(frame.empty());
return frame;
}
class CalibrateDepth
{
private:
//内参矩阵
Mat camMatrix = (Mat_(3, 3) <<917.557,0,317.0381,0,922.5312,249.2986 ,0, 0, 1);
//畸变参数
Mat distCoeff = (Mat_(5, 1) << -0.4436,0.4328,0,0,-0.1925);
public:
CalibrateDepth(vector rect_Point)
{//装甲板参数
vector armorPoint3D;
armorPoint3D.emplace_back(Point3f(-31.5f,-32.0f,0));
armorPoint3D.emplace_back(Point3f(-31.5f,+32.0f,0));
armorPoint3D.emplace_back(Point3f(+31.5f,+32.0f,0));
armorPoint3D.emplace_back(Point3f(+31.5f,-32.0f,0));
Mat rotateMatrix;
Mat transMatrix;
solvePnP(armorPoint3D,rect_Point,camMatrix,distCoeff,rotateMatrix,transMatrix);
//double rm[3][3];
//Mat rotMat(3,3,CV_64FC1,rm);
//Rodrigues(rotateMatrix,rotMat);
//float theta_z=atan2(rm[1][0],rm[0][0]*57.2958);
//float theta_y=atan2(-rm[2][0],sqrt(rm[2][0]*rm[2][0]+rm[2][2]rm[2][2]))57.2958;
//float theta_x=atan2(rm[2][1],rm[2][2])57.2958;
//vector reference_Image;
//projectPoints(armorPoint3D,rect_Point,camMatrix,distCoeff,rotateMatrix,transMatrix,reference_Image);
//line(rectImage, reference_Image[0], reference_Image[(1)], (0,0,255), 1, 8);
double tx=transMatrix.ptr(0)[0];
double ty=transMatrix.ptr(0)[1];
double tz=transMatrix.ptr(0)[2];
double depth;
depth=sqrt(tx
tx+tyty+tztz);
cout<<depth<<endl;
double pitAngle=atan2(ty,tz)*57.2958;
double yawAngle=atan2(tx,tz)*57.2958;

         };};

int main()
{
VideoCapture capture;
capture.open(1);
if (!capture.isOpened())
return -1;
while(1)
{
Mat srcImage,blurImage,grayImage,thresholdImage;
srcImage=getfram(capture);
imshow(“srcImage”,srcImage);
cvtColor(srcImage,grayImage,COLOR_RGB2GRAY);
blur(grayImage,grayImage,Size(9,9));
Mat Erode_element=getStructuringElement(MORPH_RECT,Size(5,5));
erode(grayImage,grayImage,Erode_element);
threshold(grayImage,thresholdImage,40,255,THRESH_BINARY);
imshow(“thresholdImage”,thresholdImage);
vector<vector> contours;
vector hierachay;
Mat contoursImage=Mat::zeros(srcImage.size(),CV_8U);
Mat rectImage=Mat::zeros(srcImage.size(),CV_8U);
vector all_rotatedrect;
Point2f rectPoint[4];
vector rect_Point;
findContours(thresholdImage,contours,hierachay,RETR_CCOMP,CHAIN_APPROX_SIMPLE);
for(const auto& contour : contours)
{
RotatedRect lightRec = minAreaRect(contour);
all_rotatedrect.emplace_back(lightRec);
}
for(int i=0;i<(int)contours.size();i++)
{
drawContours(contoursImage,contours,i,Scalar(255,255,255),1,8);
Point2f rect_points[4];all_rotatedrect[i].points(rect_points);
int q=0;
for (int j = 0; j < 4; j++)
{

         line(rectImage, rect_points[j], rect_points[(j + 1) % 4], (255,255,255), 1, 8);if(q<4){rectPoint[q]=rect_points[j];q++;}}}Point2f lu, ld, ru, rd;sort(rectPoint, rectPoint + 4, [](const Point2f & p1, const Point2f & p2) { return p1.x < p2.x; });if (rectPoint[0].y < rectPoint[1].y){lu = rectPoint[0];ld = rectPoint[1];}else{lu = rectPoint[1];ld = rectPoint[0];}if (rectPoint[2].y < rectPoint[3].y)   {ru = rectPoint[2];rd = rectPoint[3];}else {ru = rectPoint[3];rd = rectPoint[2];}rectPoint[0]=lu;rectPoint[1]=ld;rectPoint[2]=rd;rectPoint[3]=ru;Mat jkjl=Mat::zeros(srcImage.size(),CV_8U);for (int j = 0; j < 3; j++){ line(jkjl, rectPoint[j], rectPoint[(j + 1) % 4], (255,255,255), 1, 8);}imshow("dsj",jkjl);

//cout<<rectPoint[0]<<endl<<rectPoint[1]<<endl<<rectPoint[3]<<endl<<rectPoint[4]<<endl<<endl;
for(int i=0;i<4;i++)
rect_Point.emplace_back(rectPoint[i]);
CalibrateDepth calibrate_depth(rect_Point);
rect_Point.clear();
imshow(“contoursImage”,contoursImage);
imshow(“rectImage”,rectImage);
waitKey(30);
char c=waitKey(20);
if(c==‘q’)
break;
}
}

小白 初步识别读取距离相关推荐

  1. 为什么计算机无法读取u盘,电脑无法识别读取U盘怎么办?逐一排查解决问题

    U盘是大家非常熟悉的一个移动存储设备,但是你不一定了解U盘故障,例如电脑不能识别读取U盘,这是为什么呢?如何解决这一问题?下文整理了关于电脑无法读取U盘的解决方法,大家可以参考. 电脑无法识别读取U盘 ...

  2. 如何在Android设备上识别读取美国驾照信息

    根据美国机动车管理者协会(AAMVA https://www.aamva.org/DL-ID-Card-Design-Standard/)的规定,美国驾照使用PDF417编码,如下图: Google ...

  3. 计算机无法读取内存,图文教你如何修复电脑无法识别读取的U盘(SD卡)!-内存卡在电脑上读不出来怎么办...

    今天来说说如何自己动手修复电脑无法识别,读取的U盘,SD卡也同样可以修复,新手朋友可以借鉴学习学习,还望高手们勿喷! 想要修复肯定要用到修复工具,本文讲到的工具就是:"DiskGenius磁 ...

  4. Android之二维码生成与识别 读取相册

    二维码生成与扫描 转自http://blog.csdn.net/u012702547/article/details/51501350 读取相册二维码 转自http://blog.csdn.net/a ...

  5. 【上】带你玩转人脸识别--读取图片,灰度转换,尺寸修改,绘制矩形快速入门

    文章目录 前 言 安 装 OpenCV 导入模块 1.读取图片 (imread,imshow) 2.灰度转换 (cvtColor) 3.尺寸修改 (resize) 4.矩形.圆形的绘制 (rectan ...

  6. Delphi识别读取验证码

    unit OCR;interfaceuses Windows, SysUtils, Graphics, Classes, PNGImage, GIFImage, JPEG, Math, Asphyre ...

  7. 小白记录——识别RNA编辑位点

    碎碎念:我的心情down到了极点,为嘛不让我回去啊,求求了求求了疫情赶紧结束吧... 闲下来就会胡思乱想,忙一些反倒很充实,让任务压死我吧,我不想总是产生奇奇怪怪的想法压迫我的(猪猪)脑子... 目录 ...

  8. Java之初步识别网络编程:IP、端口号、TCP/UDP、Socket、URL等

    文章目录 一.网络编程概述 二.网络通信要素概述 三.通信要素1:IP和端口号 IP相关 InetAdress类 如何实例化InetAddress 端口号 四.通信要素2:网络协议 TCP/IP协议簇 ...

  9. python二维码识别读取_python+opencv检测图片中二维码

    缘起 需要检测发票中二维码的位置,以确定图像该怎么旋转,同时也可以为提取二维码信息创造先觉条件!(万恶的需求!) 失败的尝试--opencv训练大法 不感兴趣的可跳过不看! 解释:原文作者是训练检测舌 ...

最新文章

  1. hangfire 过期记录_时隔数月后我又有减肥的想法(饮食日记录)
  2. 重写 View 的 Touch 方法,实现一个酷炫的九宫格图片
  3. 【网址收藏】rancher镜像源仓库
  4. 如何将数据写入excel中,而不覆盖原有数据
  5. 【剑指offer】面试题25:合并两个排序的链表(Java)
  6. 服务器可用性监测系统,可用性监控区别
  7. xmlhttp资料(收集)
  8. 如何修复MySQL配置文件?
  9. 2018地图poi数据下载
  10. 阿里云封禁端口25,导致smtp.126.com邮件无法发送-解决方案+springboot配置
  11. matlab中如何调用子函数
  12. 图像着色 使用 OpenCV ,深度学习 进行 黑白图像着色
  13. 微信扫码(扫一扫二维码)下载不了app怎么解决
  14. 趣图 | 小哥哥你怎么那么高冷呀?
  15. 项目实战:ASP.NET:B/S结构 个人空间相册、照片上传下载系统
  16. 【报告分享】2021直播电商年度数据报告-抖音快手-果集数据(附下载)
  17. 个人计算机能力提升研修计划,教师计算机能力提升个人研修计划
  18. [HTML]列表、表格、表单
  19. 2022-03-25 Cynthia SQL Injection
  20. commons-email邮件工具类的基本使用

热门文章

  1. 用MySQL创建数据库和数据库表
  2. 如何避免贫穷和忙碌,在2018年你需要这样提升自己 2018年01月07日 00:00:00 2099 热文导读 | 点击标题阅读 Java和Android架构2017年总结:文章精选 吊炸天!74
  3. 卷积神经网络(CNN)在无人驾驶中的应用
  4. 数据挖掘SPSS Clementine 12.0.3 多国语言(含中文)破解版
  5. 大数据市场规模5年将达8000亿 交易平台忙圈地
  6. 我的征程是未来!带你展望2015年最重要的网页设计趋势
  7. Java Review - 并发编程_并发List_CopyOnWriteArrayList源码剖析
  8. jvm性能调优实战 - 44Metaspace区域是如何因为类太多而发生内存溢出OOM
  9. 白话Elasticsearch02- 结构化搜索之filter执行原理bitset机制与caching机制
  10. Redis-01Redis概述