位置: 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解析漏洞)

  • 怎样做好百度贴吧推广 以正面新闻为主浅尝辄止(如何在百度发帖做推广)

    怎样做好百度贴吧推广 以正面新闻为主浅尝辄止(如何在百度发帖做推广)

  • flash是什么意思(flashcharge是什么意思)

    flash是什么意思(flashcharge是什么意思)

  • oppo手机自动恢复原默认壁纸(oppo手机自动恢复出厂设置怎么回事)

    oppo手机自动恢复原默认壁纸(oppo手机自动恢复出厂设置怎么回事)

  • 华为手机需要更新系统吗(华为手机需要更换电池吗)

    华为手机需要更新系统吗(华为手机需要更换电池吗)

  • 5g比4g速度快多少倍(5g比4g网速快多少倍)

    5g比4g速度快多少倍(5g比4g网速快多少倍)

  • 手机导航键在哪里设置(手机导航键在哪个位置)

    手机导航键在哪里设置(手机导航键在哪个位置)

  • 手机电池负27度解决方法(手机电池温度27度正常吗)

    手机电池负27度解决方法(手机电池温度27度正常吗)

  • 华为平板设置休眠点不了怎么办(华为平板设置休眠时间不起作用)

    华为平板设置休眠点不了怎么办(华为平板设置休眠时间不起作用)

  • 小米8青春版快充几v几a(小米8青春版快速充电)

    小米8青春版快充几v几a(小米8青春版快速充电)

  • 为什么电话卡无法连接网络(为什么电话卡无法激活)

    为什么电话卡无法连接网络(为什么电话卡无法激活)

  • dir s是什么意思(dis是什么意思f1)

    dir s是什么意思(dis是什么意思f1)

  •  微信光速抢票抢不到可以退吗(微信光速抢票抢不到可退费吗)

    微信光速抢票抢不到可以退吗(微信光速抢票抢不到可退费吗)

  • 苹果a1567是什么版本(苹果a1568是什么型号)

    苹果a1567是什么版本(苹果a1568是什么型号)

  • ios系统有没有编程软件(苹果用什么编译器)

    ios系统有没有编程软件(苹果用什么编译器)

  • 小米9怎么看电池损耗(小米9怎么看电池健康百分比)

    小米9怎么看电池损耗(小米9怎么看电池健康百分比)

  • 苹果11和xsmax区别

    苹果11和xsmax区别

  • 爱奇艺弹幕字体颜色(爱奇艺弹幕字体跟随系统)

    爱奇艺弹幕字体颜色(爱奇艺弹幕字体跟随系统)

  • 苹果x可以升级5g吗(苹果x可以升级512内存吗)

    苹果x可以升级5g吗(苹果x可以升级512内存吗)

  • 华为畅享10有nfc功能吗(华为畅享60 nfc)

    华为畅享10有nfc功能吗(华为畅享60 nfc)

  • 苹果xsmax nfc怎么使用(苹果xsmaxnfc怎么打卡)

    苹果xsmax nfc怎么使用(苹果xsmaxnfc怎么打卡)

  • 苹果xmax电池容量(iphone x x max电池容量)

    苹果xmax电池容量(iphone x x max电池容量)

  • ios12.2多大(ios12.4.9多大)

    ios12.2多大(ios12.4.9多大)

  • 三星怎么看电池损耗(三星怎么看电池循环次数)

    三星怎么看电池损耗(三星怎么看电池循环次数)

  • oppo人工智能怎样召唤(oppo人工智能怎么设置)

    oppo人工智能怎样召唤(oppo人工智能怎么设置)

  • 手把手教你修改显示属性(怎么修改?)

    手把手教你修改显示属性(怎么修改?)

  • 税控盘注意事项
  • 外贸企业出口退税流程图
  • 先收到发票还未付款怎么做账
  • 车间设备折旧费属于制造费用吗
  • 税务局个人开发票流程
  • 怎么调开票金额
  • 收到承兑如何贴现
  • 购进库存商品溢余账务处理怎么做?
  • 不动产出租属于什么收入
  • 公司土地被征收员工该怎么办
  • 供热企业采暖费收入免征增值税政策解读
  • 一般纳税人开技术服务费
  • 含税金是什么意思
  • 京挑客怎么赚钱
  • 汇算清缴之前找回来成本发票可以吗
  • 资产减值损失如何结转本年利润
  • 生产成本明细账怎么填图片
  • 小规模固定资产一次性扣除
  • 广告公司车身广告
  • 用自产的产品用于生产线
  • phpemail正则
  • 计提长期待摊费用会计分录怎么写
  • 魁北克位置地图
  • 交增值税还交营业税吗
  • 代发工资跨行手续怎么办
  • 房地产开发公司组织架构
  • 房地产企业销售额扣除土地价款
  • 如何做好零售商
  • 总分类账的登记依据和方法取决于企业所采用的
  • javascript生成器
  • php有多简单
  • 收到退回的增值税专用发票账务处理
  • php数组函数有哪些
  • php上传文件限制大小
  • 帝国cms怎么安装不了
  • python设置配置文件
  • 银行存款存款单丢了怎么办
  • 利润分配的5个基本原则
  • 营改增后简易计税是多少税率
  • 固定成本和变动成本举例
  • 个人餐饮费发票
  • 公司固定电话费用挂哪个科目
  • 计提增值税如何做账
  • 零申报报表怎么填写
  • 成本大于收入汇算清缴怎么处理
  • 外资企业所得税优惠政策
  • 安全费用支付
  • 招待费用的进项发票可以抵扣吗
  • 免征的增值税账务处理
  • 公司在筹备阶段怎么办
  • 银行日记账的登记依据有哪些
  • 分公司有独立账套吗
  • 企业进行短期投资的目的包括
  • SQL里类似SPLIT的分割字符串函数
  • mac mysql密码
  • windows server core license
  • Linux x86_64下安装Flash Player 9
  • ubuntu如何读
  • debian openssh
  • 硬盘版win10
  • windows7功能打不开怎么办
  • win7系统硬盘
  • w7升级w8.1
  • 文件属性命令
  • css 网页布局
  • unity4.x升级到unity5.x材质丢失
  • jquery easyui开发指南
  • easyui选项卡
  • css checked
  • python用于读取文本文件内容的方法
  • unity接收udp
  • jQuery使用zTree插件实现树形菜单和异步加载
  • js浮动窗口
  • js正则匹配数字
  • 浙江电子税务局移动端
  • 2022年最新最全执业药师继续教育考试答案
  • 广西国税电话号码
  • 药店开给个人的增值税发票是什么样
  • 福建生育登记证明电子版在哪查
  • 企业可以出台政策吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设