百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

OpenCV 深度估计与分割 opencv 深度图

yuyutoo 2024-10-13 00:30 2 浏览 0 评论

使用深度摄像头的数据来识别前景区域和背景区域,首先要有一个深度摄像头,比如微软的Kinect,英特尔的realsense。

RealSense不支持在OSX上运行

https://communities.intel.com/thread/109986

mac上配置解决方案

https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_osx.md

深度相关通道的概念:

  • 深度图:它是灰度图像,该图像的每个像素值都是摄像头到物体表面之间的距离的估计值,比如,CAPOPENNIDEPTH_MAP通道的图像给出了基于浮点数的距离,该距离以毫米为单位。
  • 点云图:它是彩色图像,该图像的每种颜色都对应一个(x,y或z)维度空间,比如CAPOPENNIPOINTCLOUDMAP通道会得到BGR图像,从摄像头的角度来看,B对应x(蓝色是右边),G对应y(绿色是向上),R对应z(红色对应深度),这个值的单位是米。
  • 视差图:它是灰度图像,该图像的每个像素值代表物体表面的立体视差,立体视差是指:假如将从不同视角观察同一场景得到的两张图像叠放在一起,这很可能让人感觉是两张不同的图像,在这个场景中,针对两张图像中两个孪生的物体之间任意一对相互对应的两个像素点,可以度量这些像素之间的距离,这个度量就是立体视差,近距离的物体会产生较大的立体视差,而远距离的就小一些,因此近距离的物体视差图会明亮一些。
  • 有效深度掩模:它是表明一个给定的像素的深度信息是否有效(一个非零值表示有效,零值表示无效),比如,如果深度摄像头依赖于红外照明器(红外闪光灯),在灯光被遮挡的区域(阴影)的深度信息就为无效。

深度摄像头RealSense 的SDK

GitHub地址:https://github.com/IntelRealSense/librealsense(建议Window或Ubuntu)

使用普通摄像头进行深度估算

深度摄像头是极少在捕获图像时能估计物体与摄像头之间距离的设备,深度摄像头是如何得到深度信息的呢?

深度摄像头(比如微软的Kinect)将传统摄像头和一个红外传感器相结合来帮助摄像头区别相似物体并计算他们与摄像头之间的距离。

如何用realsensesdk,如何用Kinect

普通摄像头完成物体到摄像头之间的距离,极几何。极几何是如何工作的呢?它跟踪从摄像头到图像上每个物体的虚线,然后在第二张图片做同样的操作,并根据同一个物体对应的线交叉来计算距离。

OpenCV如何使用极几何来计算所谓的视差图?

视差图计算StereoSGBM

使用GrabCut进行前景检测

计算视差图对检测图像的前景很有用,(OpenCV)StereoSGBM主要是从二维图片中得到三维信息。

GrabCut算法的实现步骤为:

  • 1.在图片中定义含有(一个或者多个)物体的矩形
  • 2.矩形外的区域被自动认为是背景
  • 3.对于用户定义的矩形区域,可用背景中的数据来区别它里面的前景和背景区域
  • 4.用高斯混合模型来对背景和前景建模,并将未定义的像素标记为可能的前景或背景
  • 5.图像中欧冠的每一个像素都被看作通过虚拟边与周围像素相连接,而每条边都有一个属于前景或背景的概率,这基于它与周围颜色上的相似性
  • 6.每一个像素(即算法中的节点)会与一个前景或背景节点链接
  • 7.在节点完成链接后,若节点之间的边属于不同终端,则会切断它们之间的边,这就能将图像各部分分割出来
import numpy as npimport cv2from matplotlib import pyplot as plt#使用分水岭和GrabCut算法进行物体分割img = cv2.imread('images/statue_small.jpg')mask = np.zeros(img.shape[:2],np.uint8)bgdModel = np.zeros((1,65),np.float64)fgdModel = np.zeros((1,65),np.float64)rect = (100,1,421,378)cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT)mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')img = img*mask2[:,:,np.newaxis]plt.subplot(121), plt.imshow(img)plt.title("grabcut"), plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(cv2.cvtColor(cv2.imread('images/statue_small.jpg'), cv2.COLOR_BGR2RGB))plt.title("original"), plt.xticks([]), plt.yticks([])plt.show()

使用分水岭算法进行图像分割

#-*- coding=utf-8 -*-import numpy as npimport cv2from matplotlib import pyplot as plt#使用分水岭算法进行图像分割img = cv2.imread('images/basil.jpg')gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#将颜色转为灰度后,可为图像设一个阈值,将图像分为两部分:黑色部分和白色部分ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)# noise removal  噪声去除,morphologyEx是一种对图像进行膨胀之后再进行腐蚀的操作kernel = np.ones((3,3),np.uint8)opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2)# sure background area 确定背景区域,图像进行膨胀操作sure_bg = cv2.dilate(opening,kernel,iterations=3)# Finding sure foreground area,通过distanceTransform来获取确定的前景区域dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5)ret, sure_fg = cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0)# Finding unknown regionsure_fg = np.uint8(sure_fg)unknown = cv2.subtract(sure_bg,sure_fg)# Marker labellingret, markers = cv2.connectedComponents(sure_fg)# Add one to all labels so that sure background is not 0, but 1markers = markers+1# Now, mark the region of unknown with zeromarkers[unknown==255] = 0markers = cv2.watershed(img,markers)img[markers == -1] = [255,0,0]plt.imshow(img)plt.show()

相关推荐

野路子科技!2步教你把手机改造成一个FTP服务器,支持PC互传

哈喽,大家好,我是野路子科技,今天来给大家带来一个教程,希望大家喜欢。正如标题所言,就是教大家如何把售价改造成FTP服务器,而这个时候估计有朋友会问了,把手机改造成FTP服务器有什么用呢?现在有Q...

不得不看:别样于Server-U的群晖文件存储服务器的搭建与使用

我先前的作品中,有着关于Server-U的ftp文件存储服务器的搭建与访问的头条文章和西瓜视频,而且我们通过各种方式也给各位粉丝介绍了如何突破局域网实现真正意义上的公网访问机制技术。关于Server-...

Qt三种方式实现FTP上传功能_qt引入qftp库

FTP协议FTP的中文名称是“文件传输协议”,是FileTransferProtocol三个英文单词的缩写。FTP协议是TCP/IP协议组中的协议之一,其传输效率非常高,在网络上传输大的文件时,经...

Filezilla文件服务器搭建及客户端的使用

FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。可控性、有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户...

美能达柯美/震旦复印机FTP扫描怎么设置?

好多网友不知道怎么安装美能达/震旦复印机扫描,用得最多是SMB和FTP扫描,相对于SMB来说,FTP扫描安装步骤更为便捷,不容易出问题,不需要设置文件夹共享,所以小编推荐FTP来扫描以美能达机器为例详...

CCD(简易FTP服务器软件)_简单ftp服务器软件

CCD简易FTP服务器软件是一款很方便的FPT搭建工具,可以将我们的电脑快速变成一个FPT服务器。使用方法非常简单,只要运行软件就会自动生效,下载银行有该资源。该工具是不提供操作界面的,其他用户可以输...

Ubuntu系统搭建FTP服务器教程_ubuntu架设服务器

在Ubuntu系统上搭建FTP服务器是文件传输的一个非常实用方法,适合需要进行大量文件交换的场景。以下是一步步指导,帮助您在Ubuntu上成功搭建FTP服务器。1.安装vsftpd软件...

理光FTP扫描设置教程_理光ftp扫描设置方法

此教程主要用来解决WIN10系统下不能使用SMB文件夹扫描的问题,由于旧的SMB协议存在安全漏洞,所以微软在新的系统,WIN8/WIN10/SERVER201220162018里使用了新的SMB传...

纯小白如何利用wireshark学习网络技术

写在前面工欲善其事必先利其器!熟悉掌握一种神器对以后的工作必然是有帮助的,下面我将从简单的描述Wireshark的使用和自己思考去写,若有错误或不足还请批评指正。...

京东买13盘位32GB内存NAS:NAS系统安装设置教程

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:yasden你没有看错,我在京东自营商城购买硬件,组装了一台13盘位,32GB内存的NAS,硬盘有13个盘位!CPU是AMD的5500!本文...

FileZilla搭建FTP服务器图解教程_filezilla server搭建ftp服务器

...

python教程之FTP相关操作_python ftps

ftplib类库常用相关操作importftplibftp=ftplib.FTP()ftp.set_debuglevel(2)#打开调试级别2,显示详细信息ftp.connect(“I...

xftp怎么用,xftp怎么用,具体使用方法

Xftp是一款界面化的ftp传输工具,用起来方便简单,这里为大家分享下Xftp怎么使用?希望能帮到有需要的朋友。IIS7服务器管理工具可以批量管理、定时上传下载、同步操作、数据备份、到期提醒、自动更新...

树莓派文件上传和下载,详细步骤设置FTP服务器

在本指南中,详细记录了如何在树莓Pi上设置FTP。设置FTP可以在网络上轻松地将文件传输到Pi上。FTP是文件传输协议的缩写,只是一种通过网络在两个设备之间传输文件的方法。还有一种额外的方法,你可以用...

win10电脑操作系统,怎么设置FTP?windows10系统设置FTP操作方法

打印,打印,扫描的日常操作是每一个办公工作人员的必需专业技能,要应用FTP作用扫描文件到电脑上,最先要必须一台可以接受文件的FTP服务器。许多软件都需要收费标准进行,但人们还可以应用Windows的系...

取消回复欢迎 发表评论: