双目视觉测距主要是利用了目标点在左右两幅图像上成像的横向坐标存在的视差,视差与目标点到成像平面的距离Z存在着反比关系:Z=fT/d

首先下载一些先关的软件包(有就不用安装了):

pip install --upgrade setuptools
pip install numpy Matplotlib
pip install opencv-python
pip install --user opencv-contrib-python


需要说明的是;采用pip安装对网速的是有要求的,有时会导致安装失败,有时也可能是其他原因导致失败;解决方法之一就是继续重新安装,直到成功!

在进行一个简单测试的代码是,出现问题:

raceback (most recent call last):File "G:\WangLuoRuanJian\Myapp\shiyan\chuankoult\theone\leftjiaoz.py", line 22, in <module>disparity = stereo.compute(img_L, img_R)
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\calib3d\src\stereobm.cpp:1110: error: (-209:Sizes of input arguments do not match) All the images must have the same size in function 'cv::StereoBMImpl::compute'


改变文件的读取路径的方式;将‘\’变为’/'就不会出错了!
测试结果:

测试代码:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u'''
Created on 2019年4月22日@author: wuluo
'''
__author__ = 'wuluo'
__version__ = '1.0.0'
__company__ = u'重庆交大'
__updated__ = '2019-04-26'import cv2
import numpy as np
from matplotlib import pyplot as pltimg_L = cv2.imread('G:\2018and2019two\qianrushi\one.jpg', 0)
img_R = cv2.imread('G:/2018and2019two/qianrushi/two.jpg', 0)# OpenCV 3.0的函数为StereoBM_create
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
disparity = stereo.compute(img_L, img_R)plt.subplot(121), plt.imshow(img_L, 'gray'), plt.title('img_left'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(disparity, 'gray'), plt.title('disparity'), plt.xticks([]), plt.yticks([])
plt.show()if __name__ == "__main__":pass

从网址:http://vision.middlebury.edu/stereo/data/ 中任意选择两组双目图像(各left-right两张图片);

双目景深图代码:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
u'''
Created on 2019年4月22日@author: wuluo
'''
__author__ = 'wuluo'
__version__ = '1.0.0'
__company__ = u'重庆交大'
__updated__ = '2019-04-26'# 原始jpg已经畸变矫正
import numpy as np
import cv2
IMAGE_WIDTH = 800
IMAGE_HEIGHT = 600
capL = cv2.VideoCapture(2)
capR = cv2.VideoCapture(0)
imgL = np.zeros((IMAGE_WIDTH, IMAGE_HEIGHT, 3), np.uint8)
imgR = np.zeros((IMAGE_WIDTH, IMAGE_HEIGHT, 3), np.uint8)stereo = None
opencv_measure_version = int(cv2.__version__.split('.')[0])
windowSize = 5
minDisp = 10
numDisp = 250 - minDispstereo = cv2.StereoSGBM_create(minDisparity=minDisp,numDisparities=numDisp,blockSize=16,P1=8 * 3 * windowSize**2,P2=32 * 3 * windowSize**2,disp12MaxDiff=1,uniquenessRatio=10,speckleWindowSize=100,speckleRange=32
)
capL.set(cv2.CAP_PROP_FRAME_WIDTH,  IMAGE_WIDTH)
capL.set(cv2.CAP_PROP_FRAME_HEIGHT, IMAGE_HEIGHT)
capR.set(cv2.CAP_PROP_FRAME_WIDTH,  IMAGE_WIDTH)
capR.set(cv2.CAP_PROP_FRAME_HEIGHT, IMAGE_HEIGHT)
imgL = cv2.imread('G:/2018and2019two/qianrushi/one.jpg')
imgR = cv2.imread('G:/2018and2019two/qianrushi/two.jpg')# create gray images
imgGrayL = cv2.cvtColor(imgL, cv2.COLOR_BGR2GRAY)
imgGrayR = cv2.cvtColor(imgR, cv2.COLOR_BGR2GRAY)
# calculate histogram
imtGrayL = cv2.equalizeHist(imgGrayL)
imtGrayR = cv2.equalizeHist(imgGrayR)# through gausiann filter
imgGrayL = cv2.GaussianBlur(imgGrayL, (5, 5), 0)
imgGrayR = cv2.GaussianBlur(imgGrayR, (5, 5), 0
cv2.imshow("image left", imgGrayL)
cv2.imshow("image right", imgGrayR)# calculate disparity
disparity = stereo.compute(imgGrayL, imgGrayR).astype(np.float32) / 16
disparity = (disparity - minDisp) / numDisp
cv2.imshow("disparity", disparity)
cv2.waitKey(0)if __name__ == "__main__":pass

运行的结果图:

python学习之双目图像得到景深图(及遇到的问题)相关推荐

  1. Python学习-Matplotlib库绘制简单点阵图、线型图操作

    Python学习-Matplotlib库绘制简单散点图图和线型图.标签设置以及刻度线设置操作 目录 1.Matplotlib绘图细节的简单理解 2.绘制点图.线型图 3.给图表设置复杂标注 4.移动刻 ...

  2. 半个月爆肝,Python学习指南:学习方法、路径图、资料都备齐了!

    1.6米长,八年Python使用经验,耗时半月,制作了这张Python学习路径图! 视频大纲: 自己的课代表 1.为什么学习python 00:43 2.python学习路径图和python备忘手册( ...

  3. 【Python教程】雨痕 的《Python学习笔记》(附脑图)

    本文转自至:http://www.pythoner.com/148.html 近日,在某微博上看到有人推荐了这本作者是 雨痕 的<Python学习笔记>,从github上下载下来看了下,确 ...

  4. python笔记图片_【Python教程】雨痕 的《Python学习笔记》(附脑图)

    更多 近日,在某微博上看到有人推荐了这本作者是 雨痕 的<Python学习笔记>,从github上下载下来看了下,确实很不错. 注意,这本学习笔记不适合Python新手学习. 从目录上看, ...

  5. Python学习之生成带logo背景图的二维码(静态和动态图)

    前言 二维码简称 QR Code(Quick Response Code),学名为快速响应矩阵码,是二维条码的一种,由日本的 Denso Wave 公司于 1994 年发明.现随着智能手机的普及,已广 ...

  6. python学习笔记 -- 03 实现切割九图

    废话 朋友问我能不能搞个九图切割的小软件,我就着手搞了 不过这次注释我会用英文写 九图切割 一.需求 选择图片路径 裁剪图片成九张 保存裁剪的九张图片 二.步骤分析 选择图片 打开图片 裁剪图片 保存 ...

  7. python做实时温度曲线图_Python学习记录 - matplotlib绘制温度变化折线图

    Python学习记录 - matplotlib绘制温度变化折线图 Python学习记录 - matplotlib绘制温度变化折线图 题目:列表a表示10点到12点每一分钟的气温,累计为2个小时,绘制折 ...

  8. BidNet:无视差估计的双目图像去雾(CVPR2020)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:陈翔 https://zhuanlan.zhihu.com/p/148344528 本文仅做学术 ...

  9. 从单张图像学习双目图像

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:Learning Stereo from Single Images 作者: Jamie Wat ...

最新文章

  1. 爬虫单个ip代理设置_爬虫怎样设置代理ip池
  2. android 7.0 禁止 imei,Android一些适配
  3. 本博打开方式,请详读
  4. 华为鸿蒙系统适应手机,魅族宣布接入鸿蒙生态,成为国内首家积极响应并支持华为的国内厂商...
  5. python简单图片处理
  6. u盘显示请插磁盘f_U盘插电脑上一直显示请插入磁盘是啥意思 - 卡饭网
  7. 第一章 tooltips自定义
  8. java对接paypal支付应用实例 (v2)
  9. 爬虫——代理IP的高匿、匿名、透明介绍
  10. Phonetic symbol 辅音 - 清辅音 -- /f/
  11. 电脑备份,电脑怎么备份系统?电脑备份系统的方法
  12. Github地址修改后,修改项目仓库地址
  13. 【尚硅谷_java基础】十五、网络编程
  14. 打印任何年月的日历表(Java)
  15. 字符串查找函数:strchr、strrchr、strchrnul、strstr、strrstr
  16. Java自学之异常处理——自学笔记
  17. Mysql出现问题:什么是prepare语句解决方案
  18. 微信小程序的常见的面试题(总结)
  19. 使用stm32cubeIDE建立USB HOST工程读取大容量U盘(MSC类库)
  20. STM32F103C8T6 移植 μC/OS-ii Keil(二)

热门文章

  1. Like What You Like: Knowledge Distill via Neuron Selectivity Transfer论文初读
  2. 组员组长mysql_GitHub - gzh51906/ManKeZhan: 组长:黄林芳 组员:陈炜,王佳伟
  3. 无线网络打印机服务器安装步骤,在win7安装带网络服务器的打印机步骤.ppt
  4. 100量子比特量子计算机,51量子比特模拟器问世,大规模量子计算机迈出重要一步...
  5. LoRa码元、码片、信号带宽、编码率等解析
  6. 吉信通:如何使用电脑简单的发送短信
  7. Linux下用火焰图进行性能分析
  8. 更新谷歌浏览器 55 提示 adobe flash player 不是最新版本
  9. 智能语音技术的深度解析
  10. Perl之Spreadsheet::WriteExcel安装