位置: IT常识 - 正文

单目测距原理与实现(代码可运行)(单目测距精度)

编辑:rootadmin
单目测距原理与实现(代码可运行)

推荐整理分享单目测距原理与实现(代码可运行)(单目测距精度),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:单目图像测距,单目测距精度,单目测距精度,单目测距精度,单目测距和双目测距,单目测距原理与实现,单目测距原理与实现,单目测距方法,内容如对您有帮助,希望把文章链接给更多的朋友!

 Opencv3实现单目视觉测距

一、前言

单目视觉测距:网上有很多关于单目测距的文章,主要借鉴的是OpenCV学习笔记(二十一)——简单的单目视觉测距尝试和单目摄像机测距(python+opencv)两篇文章,在这里特别作出说明。

工作环境:Ubuntu16.04 + Opencv3.4.0 +Pycharm

单目相机:DFK AFUX236-M12

二、单目测距原理

单目相机测距常用或者说实用的方法就是相似三角形法,为了让大家更好地理解程序,这里简单说一下相似三角形法。

相似三角形:假设我们有一个宽度为 W 的目标或者物体。然后我们将这个目标放在距离我们的相机为 D 的位置。我们用相机对物体进行拍照并且测量物体的像素宽度 P 。这样我们就得出了相机焦距的公式:

F = (P x D) / W

单目测距原理与实现(代码可运行)(单目测距精度)

举个例子,假设我在离相机距离 D = 24 英寸的地方放一张标准的 8.5 x 11 英寸的 A4 纸(横着放;W = 11)并且拍下一张照片。我测量出照片中 A4 纸的像素宽度为 P = 249 像素。

因此我的焦距 F 是:

F = (248px x 24in) / 11in = 543.45

当我继续将我的相机移动靠近或者离远物体或者目标时,我可以用相似三角形来计算出物体离相机的距离:

D’ = (W x F) / P

为了更具体,我们再举个例子,假设我将相机移到距离目标 3 英尺(或者说 36 英寸)的地方并且拍下上述的 A4 纸。通过自动的图形处理我可以获得图片中 A4 纸的像素距离为 170 像素。将这个代入公式得:

D’ = (11in x 543.45) / 170 = 35 英寸

或者约 36 英寸,合 3 英尺。

从以上的解释中,我们可以看到,要想得到距离,我们就要知道摄像头的焦距和目标物体的尺寸大小,这两个已知条件根据公式:  

D’ = (W x F) / P 

得出目标到摄像机的距离D,其中P是指像素距离,W是A4纸的宽度,F是摄像机焦距。

三、实现代码:import cv2import numpy as npwin_width = 1920win_height = 1200mid_width = int(win_width / 2)mid_height = int(win_height / 2)foc = 2810.0real_wid = 11.69font = cv2.FONT_HERSHEY_SIMPLEXw_ok = 1capture = cv2.VideoCapture(1)capture.set(3, win_width)capture.set(4, win_height)while(True): ret, frame = capture.read() # frame = cv2.flip(frame, 1) if ret == False: break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray, (5, 5), 0) ret, binary = cv2.threshold(gray, 127, 255, 0) kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3, 3)) binary = cv2.dilate(binary, kernel, iterations=2) # 形态学膨胀 contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # cv2.drawContours(frame, contours, -1, (0, 255, 0), 2) for c in contours: if cv2.contourArea(c) < 2000: # 对于矩形区域,只显示大于给定阈值的轮廓,所以一些微小的变化不会显示。对于光照不变和噪声低的摄像头可不设定轮廓最小尺寸的阈值 continue x, y, w, h = cv2.boundingRect(c) # 该函数计算矩形的边界框 if x > mid_width or y > mid_height: continue if (x + w) < mid_width or (y + h) < mid_height: continue if h > w: continue if x == 0 or y == 0: continue if x == win_width or y == win_height: continue w_ok = w cv2.rectangle(frame, (x + 1, y + 1), (x + w_ok - 1, y + h - 1), (0, 255, 0), 2) dis_inch = (real_wid * foc) / (w_ok - 2) dis_cm = dis_inch * 2.54 # os.system("cls") # print("Distance : ", dis_cm, "cm") frame = cv2.putText(frame, "%.2fcm" % (dis_cm), (5, 25), font, 0.8, (0, 255, 0), 2) frame = cv2.putText(frame, "+", (mid_width, mid_height), font, 1.0, (0, 255, 0), 2) cv2.namedWindow('res', 0) cv2.namedWindow('gray', 0) cv2.resizeWindow('res', win_width, win_height) cv2.resizeWindow('gray', win_width, win_height) cv2.imshow('res', frame) cv2.imshow('gray', binary) c = cv2.waitKey(40) if c ==27: breakcv2.destroyAllWindows()程序效果图如下:

本文链接地址:https://www.jiuchutong.com/zhishi/299575.html 转载请保留说明!

上一篇:使用YOLOv5实现图片、视频的目标检测(yolov5的使用)

下一篇:JSONP数据劫持漏洞(json解析漏洞)

  • 怎样重装系统win10保留原文件(怎样重装系统win7)(怎样重装系统win7系统旗舰版)

    怎样重装系统win10保留原文件(怎样重装系统win7)(怎样重装系统win7系统旗舰版)

  • iqoo8怎么锁定应用(iqoo手机怎么设置锁屏)

    iqoo8怎么锁定应用(iqoo手机怎么设置锁屏)

  • apple watch 蜂窝版怎么用(applewatch蜂窝版可以不带手机吗)

    apple watch 蜂窝版怎么用(applewatch蜂窝版可以不带手机吗)

  • xsmax运行内存多大(xs max运行内存)

    xsmax运行内存多大(xs max运行内存)

  • 苹果光圈怎么开(苹果光圈怎么调出来)

    苹果光圈怎么开(苹果光圈怎么调出来)

  • iphonex听筒声音小解决方法(iphonex听筒声音很小扬声器正常)

    iphonex听筒声音小解决方法(iphonex听筒声音很小扬声器正常)

  • 比心新人首单免费吗(比心首单免费从哪里领取)

    比心新人首单免费吗(比心首单免费从哪里领取)

  • excel独立式图表怎么弄(excel独立式图表快捷键)

    excel独立式图表怎么弄(excel独立式图表快捷键)

  • 输入验证码为什么老是说错误(输入验证码为什么没有反应)

    输入验证码为什么老是说错误(输入验证码为什么没有反应)

  • 苹果手机中,app无法连接网络的解决方法是什么?(苹果手机中app内购买是什么意思)

    苹果手机中,app无法连接网络的解决方法是什么?(苹果手机中app内购买是什么意思)

  • 拼多多违规资金还能提出来吗(拼多多违规资金保护中多久解除限制)

    拼多多违规资金还能提出来吗(拼多多违规资金保护中多久解除限制)

  • 充电宝里面用什么电池(充电宝里面用什么电池最好)

    充电宝里面用什么电池(充电宝里面用什么电池最好)

  • oppor11splus有没有nfc(oppor11splus有没有nfc功能)

    oppor11splus有没有nfc(oppor11splus有没有nfc功能)

  • 关系模型的完整性主要有(关系模型的完整性包括)

    关系模型的完整性主要有(关系模型的完整性包括)

  • 监控云存储是什么意思(监控云存储是什么意思是不是一开始使用监控就存下了)

    监控云存储是什么意思(监控云存储是什么意思是不是一开始使用监控就存下了)

  • 如何将华为旧手机所有资料导入新手机(如何将华为旧手机所有资料导入iPhone)

    如何将华为旧手机所有资料导入新手机(如何将华为旧手机所有资料导入iPhone)

  • 阿里云ecs是什么(阿里云ecs底层用的什么技术)

    阿里云ecs是什么(阿里云ecs底层用的什么技术)

  • 办公室一体复印机怎么扫描(办公室一体复印机怎么扫描身份证)

    办公室一体复印机怎么扫描(办公室一体复印机怎么扫描身份证)

  • vivo的nfc在哪里打开(vivo中nfc在哪里)

    vivo的nfc在哪里打开(vivo中nfc在哪里)

  • vivoy79红包提醒怎么设置(vivoy55a红包提醒)

    vivoy79红包提醒怎么设置(vivoy55a红包提醒)

  • 三星s6手机什么处理器(三星s6什么型号)

    三星s6手机什么处理器(三星s6什么型号)

  • iphonexr如何隐藏应用(iphoneXR如何隐藏app)

    iphonexr如何隐藏应用(iphoneXR如何隐藏app)

  • vivos1有没有红外线(vivos1红外线感应怎么开)

    vivos1有没有红外线(vivos1红外线感应怎么开)

  • 【小程序全面解析】生命周期、常用组件,代码示例和使用场景(微信小程序解锁安全吗)

    【小程序全面解析】生命周期、常用组件,代码示例和使用场景(微信小程序解锁安全吗)

  • 所得税退税账务处理
  • 应税劳务销售额税率
  • 营业执照丢失公示几天才能注销
  • 转让不动产为什么不填写预缴申报表
  • 京东公户的钱怎么转出来
  • 公司税务状态变更怎么办
  • 资源税折算后计提怎么算
  • 纳税人选择简易办法一经选择
  • 怎么把原材料转为成本
  • 进口的原材料没有发票
  • 公司向个人租赁设备
  • 子公司取得的投资收益
  • 外管证交税需要带什么材料
  • 打印出来的明细账怎么装订
  • 工商营业执照变更流程
  • 集体公司改制
  • 以实物投资的税种有哪些
  • 进口货物退税流程
  • 交通补贴和通讯补贴标准
  • 如何代开外籍人员个人所得税完税凭证?
  • 公司注销注销顺序
  • 职工教育经费不提可以吗
  • 苹果mac os x 怎样打开DVD播放程序
  • 借条复印件可以起诉吗还有转账记录
  • 公司购消防器材会计分录
  • 如何手机个人热点连电脑
  • php中的类是什么
  • 怎么修改boot启动项
  • 销售商品收到商业汇票一张会计分录
  • 退回以前年度多交增值税
  • 公司员工的社保怎么查询
  • Yii使用技巧大汇总
  • TypeError: Cannot read properties of null (reading ‘insertBefore‘) vue项目报错
  • matlab绘图总结
  • 没有公网ip如何实现外网访问路由器
  • 退回税款如何做账
  • 零申报季报怎么报税的具体流程
  • 银行回单箱费会退回吗
  • 研发费用怎么体现
  • 个体定额和不定额有什么区别
  • 营改增小规模纳税人认定标准
  • 当月利息发票未开可以先入账吗
  • 股票股利的资金来源
  • 中标的工程交易怎么处理
  • sql 临时表格
  • 应交税费科目的核算内容
  • 土地使用税减免税优惠
  • 累计带薪缺勤账务怎么处理
  • 坏账准备的会计处理方法
  • 材料暂估入库的账务处理
  • 业务招待费属于管理费用吗
  • 应付工资可以挂账多长时间
  • 餐饮行业纸巾入库流程
  • 向其他公司投资专利账务处理
  • 出差包干费包括什么
  • 进项税认证未抵扣怎么做账
  • 股票交易费用计算器小程序
  • 职工福利费如何计算
  • 税控盘的会计分录怎么做
  • 购销合同印花税2023年新规定
  • 红冲发票金额大于原发票金额
  • 财务会计与管理会计的区别与联系?谁更棒?
  • 视同销售的几种情况
  • mysql查询语句菜鸟教程
  • MySQL中的max()函数使用教程
  • centos7 home
  • 极速一键装机
  • win8固态硬盘
  • Win7的sysprep工具怎么用 win7自带sysprep工具重置系统方法
  • linux系统文件系统只读
  • win7系统ie浏览器打不开
  • 浅谈特殊儿童的融合教育论文
  • 批处理文件是脚本吗
  • css div 不换行
  • jquery源码分析
  • linux bash shell中case语句的实例
  • 用javascript写表单代码
  • Unity3D的MonoBehaviour可重写函数
  • python序列结构总结
  • python语言例子
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设