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

  • 荣耀play4和荣耀play4pro的区别有哪些(荣耀play4和荣耀play5)

    荣耀play4和荣耀play4pro的区别有哪些(荣耀play4和荣耀play5)

  • 能直接与CPU交换信息的存储器是(能直接与cpu交换信息的存储器是)

    能直接与CPU交换信息的存储器是(能直接与cpu交换信息的存储器是)

  • 谷歌四件套是什么意思(谷歌四件套是什么软件)

    谷歌四件套是什么意思(谷歌四件套是什么软件)

  • 手机电池发烫是什么原因(手机电池发烫是怎么回事儿)

    手机电池发烫是什么原因(手机电池发烫是怎么回事儿)

  • 小米air2耳机怎么设置lhdc(小米air2耳机怎么配对)

    小米air2耳机怎么设置lhdc(小米air2耳机怎么配对)

  • 苹果蓝牙耳机可以同时连接两个手机吗(苹果蓝牙耳机可以修吗)

    苹果蓝牙耳机可以同时连接两个手机吗(苹果蓝牙耳机可以修吗)

  • 更新驱动有什么作用(更新驱动有什么坏处)

    更新驱动有什么作用(更新驱动有什么坏处)

  • 华为手机清灰功能在哪里(华为手机清灰功能的原理是什么)

    华为手机清灰功能在哪里(华为手机清灰功能的原理是什么)

  • 用别的充电器充电对手机伤害大吗(用别的充电器充电可以吗)

    用别的充电器充电对手机伤害大吗(用别的充电器充电可以吗)

  • 在windows7中对系统文件的维护的工具是(下列对windows7的叙述,错误的是)

    在windows7中对系统文件的维护的工具是(下列对windows7的叙述,错误的是)

  • 小米10屏幕不清晰(小米10屏幕不清楚)

    小米10屏幕不清晰(小米10屏幕不清楚)

  • 韩剧tv属于腾讯范围内吗(韩剧tv属于哪个)

    韩剧tv属于腾讯范围内吗(韩剧tv属于哪个)

  • 为什么我的隔空投送用不了(为什么我的隔空投送是所有人十分钟)

    为什么我的隔空投送用不了(为什么我的隔空投送是所有人十分钟)

  • 苹果7p充电越充越少怎么回事(苹果7p手机充电越充越少是怎么回事)

    苹果7p充电越充越少怎么回事(苹果7p手机充电越充越少是怎么回事)

  • 苹果手机怎么设置指纹解锁(苹果手机怎么设置手写)

    苹果手机怎么设置指纹解锁(苹果手机怎么设置手写)

  • 大众点评d币在哪里(大众点评金币怎么获得)

    大众点评d币在哪里(大众点评金币怎么获得)

  • vivo钱包有什么用(vivo钱包app)

    vivo钱包有什么用(vivo钱包app)

  • 主机设备包括什么(计算机主机设备)

    主机设备包括什么(计算机主机设备)

  • 唯品会如何用云闪付支付(唯品会如何用云闪付消费券)

    唯品会如何用云闪付支付(唯品会如何用云闪付消费券)

  • 华为智慧能力什么作用(什么叫华为智慧能力)

    华为智慧能力什么作用(什么叫华为智慧能力)

  • 抖音怎么搜不到千年等一回(抖音怎么搜不到对方的抖音号)

    抖音怎么搜不到千年等一回(抖音怎么搜不到对方的抖音号)

  • 华为mate10多屏互动怎么用(华为mate10pro多屏互动在哪)

    华为mate10多屏互动怎么用(华为mate10pro多屏互动在哪)

  • Win10怎么设置WinX菜单? 自定义WinX菜单的方法(win10怎么设置win7开始菜单)

    Win10怎么设置WinX菜单? 自定义WinX菜单的方法(win10怎么设置win7开始菜单)

  • Linux下的命令行浏览器links介绍(linux的命令行指的是什么)

    Linux下的命令行浏览器links介绍(linux的命令行指的是什么)

  • NvMcTray.exe是什么进程 NvMcTray.exe是什么程序(nvm是啥)

    NvMcTray.exe是什么进程 NvMcTray.exe是什么程序(nvm是啥)

  • 要约和承诺有法律效力吗
  • 企业所得税中资产总额平均值怎么核算?
  • 不是小微企业的小规模纳税人的税收优惠
  • 简易计征开什么发票
  • 小规模纳税人企业所得税怎么申报
  • 增值税负数发票可以作废吗?
  • 按利润总额的25%计算应交所得税
  • 预收购货单位货款
  • 外汇结款怎么办理
  • 长期股权投资稀释
  • 分公司亏损总公司账务处理
  • 营改增退税政策
  • 跨月冲红的发票怎么做账
  • 火车票抵扣进项税额怎么申报
  • 一般纳税人企业所得税如何计算
  • 9个点的税率有哪些
  • 民间借贷以工资抵押的案例
  • 2020快手怎么删除
  • backupnotify.exe是什么文件的进程 backupnotify进程安全吗
  • 单位卖二手车需交税吗
  • mom.exe是什么进程
  • Linux系统中怎么定位到java代码的方法级
  • linux字体不清晰
  • 长期投资损益
  • 房地产企业增值税怎么计算
  • 显卡的散热
  • php $_files
  • 财务运作规律
  • php命名空间和自由空间
  • 在数组指定位置添加数据
  • 帮别人开增值税专用发票
  • 以银行存款支付业务招待费
  • vue3.0教程
  • b站怎么进抖音模式
  • yolov5 test.py
  • 前端面试题校招
  • 帝国cms图片显示不了
  • layui树形下拉框
  • 如何简单去除
  • 固定资产清理怎么入账
  • 电子发票如何发邮箱给别人
  • 长期股权投资哪些用成本法
  • wordpress配置数据库
  • 增值税电子普通发票和专票的区别
  • 收到政府扶贫款如何做分录
  • 工资薪金可以抵扣增值税吗
  • sql2008强制还原数据库
  • 公司亏损后盈利分红
  • 一般纳税人企业所得税怎么征收
  • 残疾人工资加计扣除包括社保吗
  • 产业扶持资金管理办法
  • 住宿费专票可以抵扣进项税吗税率多少
  • 补缴以前年度的税
  • 清理固定资产是什么意思
  • 本年利润的会计科目代码
  • 物流托运不给发货
  • 应收利息审计底稿怎么做
  • 企业入库申报什么意思
  • 淘宝电商怎么做账
  • 跨年冲红发票账务处理需要调整申报表吗
  • 明细账要如何做账
  • win8如何打开设置
  • win10安装不了ie
  • linux下scp远程拷贝包含空格的目录或者文件的解决方法
  • win8怎么禁止开机启动项
  • linux乱码怎么办
  • 微软推送win11
  • centos6.9
  • linux文件系统的根目录的i节点号为
  • sed配合grep
  • 常用正则表达式汇总
  • quick-lua touch 触摸事件
  • javascript运用
  • [置顶]马粥街残酷史
  • 安卓自定义动态壁纸
  • 在android
  • 租车费为何不能抵扣
  • 从事农业种植是什么职业
  • 税收优惠政策有什么公司受影响
  • 经纪代理服务税率是多少 1%
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设