使用opencv对单目摄像头中的目标实现测量距离(python实现)

1.方法介绍:

根据相似三角形的方法:
F = P×D / W , 其中W为物体的实际宽度,D为物体平面与相机平面的距离,照片上物体的像素宽度为P,相机焦距为F
D = F×W / P ,这样知道相机的内参焦距就可以求得物体平面与相机平面的距离D

2.代码:

import cv2
import imutils
import numpy as np
from imutils import paths# 获取目标的轮廓信息
def find_marker(image):gray = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # 颜色空间转换函数,RGB和BGR颜色空间转换 opencv默认的颜色空间是BGRgray = cv2.GaussianBlur(gray, (5, 5), 0)  # 高斯滤波,对图像进行滤波操作 ,(5,5)表示高斯核的大小 ,0 表示标准差取0edged = cv2.Canny(gray, 35, 125)  # canny 算子 边缘检测 35是阈值1, 125是阈值2,大的阈值用于检测图像中的明显边缘,小的阈值用于将不明显的边缘检测连接起来cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)  # 找到详细的轮廓点, RETR_LIST 以列表的形式输出轮廓信息# CHAIN_APPROX_SIMPLE: 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标cnts = imutils.grab_contours(cnts)  # 寻找图像的轮廓信息,输入图像为一个二值图像c = max(cnts, key=cv2.contourArea)  # 轮廓点的面积计算# return edgedreturn cv2.minAreaRect(c)  # 求出在 C点集下的像素点的面积def get_F(W, D):P = find_marker(image)[1][0] / 118.11  # 300dim  1cm = 118.11像素值return (P*D) / W  # F = get_F(2, 126)  # 输出的值为cm f=24.003cm 焦距def distance_to_camera(F, P, W):return (F*W) / P  # F 为相机的焦距,w为物体的宽度,P为物体在照片中的像素宽度,需要转换为cmW = 2  # 需要手动测量目标的宽度,单位为cm
F = 24.00304  # 根据get_F求出 ,get_F()函数是为了求得相机的焦距,需要通过测试图像中的目标距离来求出image = cv2.imread('065_5.jpg')
marker = find_marker(image)
P = marker[1][0] / 118.11  # 300dim 1cm = 118.11像素值 ,300dim指300分辨率,有1080分辨率,像素值的㎝转换是不同
inches = distance_to_camera(F, P, W) #
print('距离为:%.2f cm' % inches)  # 单位为cm# draw a bounding box around the image and display it
box = cv2.cv.BoxPoints(marker) if imutils.is_cv2() else cv2.boxPoints(marker)
box = np.int0(box)
cv2.drawContours(image, [box], -1, (0, 255, 0), 2)
cv2.putText(image, "%.2fft" % inches,(image.shape[1] - 200, image.shape[0] - 20), cv2.FONT_HERSHEY_SIMPLEX,2.0, (0, 255, 0), 3)
cv2.imshow("image", image)cv2.waitKey(0)
cv2.destroyAllWindows()

3.效果验证

OpenCV实现单目摄像头对图像目标测距相关推荐

  1. opencv 图像上画出目标运动的轨迹_基于opencv的单目和双目标定平台手眼标定

      背景介绍 基于机器视觉引导的智能机器人,在现代社会各个领域已经得到了广泛的应用,尤其是大型工厂的自动化生产线上,视觉机器人可以和基于示教器按照预定轨迹进行作业的机器人互为补充,来共同提高生产的自动 ...

  2. python opencv 摄像头标定_(五)单目摄像头标定与畸变矫正(C++,opencv)

    本文将梳理一种单目摄像头标定和矫正的方法,在梳理的过程中,首先使用网上离线的图片数据跑通流程,然后接入自己的camera,手动采集标定图像,实时矫正相机的畸变,然后输出矫正后的图像.全文基于Openc ...

  3. 单目摄像头标定与测距

    单目摄像头标定与测距 一. 标定 首先要对摄像头做标定,具体的公式推导在learning opencv中有详细的解释,这里顺带提一句,这本书虽然确实老,但有些理论.算法类的东西里面还是讲的很不错的,必 ...

  4. 基于OpenCV的单目摄像机测距

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 我的论文方向目前是使用单目摄像头实现机器人对人 ...

  5. 单目摄像头检测6D姿态

    单目摄像头检测6D姿态 CVPR2019: ROI-10D: Monocular Lifting of 2D Detection to 6D Pose and Metric Shape 论文链接: h ...

  6. Mobileye采用单目摄像头做ADAS太不精确

    Mobileye采用单目摄像头做ADAS太不精确?用双目摄像头的"中科慧眼"认为双目测距算法才是最精确的 Nicholas • 2016-01-05 18:53 ADAS(Adva ...

  7. 单目摄像头光学图像测距_摄像头与毫米波雷达(Radar)融合解析

    01 摄像头和雷达的融合是很多做ADAS当前所关注的关键问题之一.因为单纯摄像头和雷达都无法解决测距问题.不仅在测距,今后可能所应用到的高精度地图也都是需要使用摄像头和雷达的融合才能够实现.当前寻求到 ...

  8. OPENCV3.0 单目摄像头标定(使用官方自带的标定图片)

    OPENCV3.0 单目摄像头标定(使用官方自带的标定图片) 转载于:https://blog.csdn.net/zc850463390zc/article/details/48946855 // o ...

  9. 双目摄像头和单目摄像头_挑战激光雷达,MAXIEYE要重新定义单目摄像头?

    周圣砚认为:以往业内对单目摄像头的顾虑更像是一种偏见,并非不能逾越的鸿沟,而偏见正是用来打破的. 作者 | 安琪 自动驾驶的"唯激光雷达论"正在受到冲击. 前不久恩智浦的全球CTO ...

最新文章

  1. iOS 7 Searchbar右侧空白
  2. Vue实现仿音乐播放器4-Vue-router实现音乐导航菜单切换
  3. 缺省参数-指定函数缺省参数的默认值
  4. Lambda化的一个例子
  5. 把windows窗口编程浅绿色的方法
  6. 渗透测试报告封面样本
  7. python菜单栏_pyqt5——菜单和工具栏
  8. jquery.treeview.js php mysql,jquery.treeview应用
  9. 字节跳动2019春招笔试——找零(JavaScript)
  10. webpack核心提炼
  11. 手工配置Service的过程中。
  12. 怎么读取cf卡id_CF卡传输程序的步骤解析
  13. outlook邮箱备份步骤
  14. RNN(recurrent neural network regularization)
  15. USB 虚拟串口简介
  16. 分布式全站爬虫——以搜狗电视剧为例
  17. HY68 RGB DM蓝牙5.2双模热插拔PCB
  18. 牛客网--关于合法括号序列判断
  19. Multisim电路仿真与面包板的使用
  20. 资料随意收集(1):Lotus Notes常见问题解决办法(实用--转帖)

热门文章

  1. keras之权重初始化
  2. 入行游戏建模,做场景建模师必备软件有哪些?有无发展前景
  3. 撩妹方式,你值得拥有!!
  4. 问题 L: 鸭子唱歌
  5. superset详解(二)--sql工具箱
  6. 苹果真伪查询_苹果自研M1芯片Mac电脑开启预售!该不该冲?
  7. 中国互联网流行文化缔造者百度贴吧,如何拥抱新时代?
  8. 台式计算机开机慢,台式机电脑开机启动半天才能开机怎么回事_台式机电脑开机启动慢很久如何解决-系统城...
  9. mybatis+spring+springmvc ssm整合
  10. android 涟漪背景,Android 水波效果 | 涟漪效果 实现