opencv電腦視覺學習筆記三

來源:互聯網
上載者:User

 

第四章 深度估計和分割

1 捕獲深度網路攝影機的幀

深度圖  灰階  每個像素都是網路攝影機到物體表面的距離 毫米

點雲圖  彩色  每種顏色對應一個維度空間  米

視差圖  灰階  每個像素代表物體表面的立體視差 近大遠小

有效深度掩模一個給定像素的深度資訊是否有效

 

2 從視差圖中得到掩模

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2016/12/1 10:16# @Author  : Retacn# @Site    : 深度網路攝影機資料的處理# @File    : depth.py# @Software: PyCharm__author__ = "retacn"__copyright__ = "property of mankind."__license__ = "CN"__version__ = "0.0.1"__maintainer__ = "retacn"__email__ = "zhenhuayue@sina.com"__status__ = "Development"import numpy as np#裝置CAP_OPENNI=900CAP_OPENNI_ASUS=910#通道(基於浮點數的距離)CAP_OPENNI_DEPTH_MAP=0#會得到bgr映像CAP_OPENNI_POINT_CLOUD_MAP=1#XYZCAP_OPENNI_DISPARITY_MAP=2#CAP_OPENNI_DISPARITY_MAP_32F=3CAP_OPENNI_VALID_DEPTH_MASK=4CAP_OPENNI_BGR_IMAGE=5CAP_OPENNI_GRAY_IMAGE=6#產生掩模def createMedianMask(disparityMap,#視差圖                     validDepthMask,#有效深度掩模                     rect=None):#矩形    if  rect is not None:        x,y,w,h=rect        disparityMap=disparityMap[y:y+h,x:x+w]        validDepthMask=validDepthMask[y:y+h,x:x+w]    #得到中值    median=np.median(disparityMap)    #產生掩模,逐像素進行布爾操作    return np.where((validDepthMask==0) | (abs(disparityMap-median)<12),#值為真假的數組,當有效視差與平均視差>=12,看作雜訊                    1.0,#為真時,數組相應元素為該值                    0.0)#為假時,為該值

 

3 對複製操作進行掩模

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2016/12/1 10:22# @Author  : Retacn# @Site    : 矩形地區複製# @File    : rects.py# @Software: PyCharm__author__ = "retacn"__copyright__ = "property of mankind."__license__ = "CN"__version__ = "0.0.1"__maintainer__ = "retacn"__email__ = "zhenhuayue@sina.com"__status__ = "Development"import cv2import numpy as npfrom Three import utils#對複製操作執行掩模def copyRect(src,             dst,             srcRect,             dstRect,             mask=None,#掩模參數,掩模要和映像有相同的通道數             interpolation=cv2.INTER_LINEAR):#插值方法為線性插值    x0,y0,w0,h0=srcRect    x1,y1,w1,h1=dstRect    #如果掩模為空白,則執行複製操作    if mask is None:        dst[y1:y1+h1,x1:x1+w1]=cv2.resize(src[y0:y0+h0,y0:y0+h0],#源映像                                          (w1,h1),#靶心圖表像                                          interpolation=interpolation)#插值方法    else:        #如果掩模為單通道,則複製通道        if not utils.isGray(src):            mask=mask.repeat(3).reshape(h0,w0,3)        dst[y1:y1+h1,x1:x1+w1]=np.where(cv2.resize(mask,(w1,h1),interpolation=cv2.INTER_NEAREST),                                        cv2.resize(src[y0:y0+h0,x0:x0+w0],(w1,h1),interpolation=interpolation),                                        dst[y1:y1 + h1, x1:x1 + w1]                                        )#一組矩形的迴圈交換def swqpRects(src,dst,rects,masks=None,interpolation=cv2.INTER_LINEAR):    if dst is not src:        dst[:]=src    numRects=len(rects)    if numRects<2:        return    if masks is None:        masks=[None]*numRects    x,y,w,h=rects[numRects-1]    temp=src[y:y+h,x:x+w].copy()    i=numRects-2    while i>=0:        copyRect(src,dst,rects[i],rects[i+1],masks[i],interpolation)        i-=1    copyRect(temp,dst,(0,0,w,h),rects[0],masks[numRects-1],interpolation)

 

 4 使用普通網路攝影機進行深試評估

 

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2016/12/1 11:40# @Author  : Retacn# @Site    : 使用普通網路攝影機進行深試估計# @File    : commonCamera2Depth.py# @Software: PyCharm__author__ = "retacn"__copyright__ = "property of mankind."__license__ = "CN"__version__ = "0.0.1"__maintainer__ = "retacn"__email__ = "zhenhuayue@sina.com"__status__ = "Development"import cv2import numpy as npdef update(val=0):    stereo.setBlockSize(cv2.getTrackbarPos('window_size','disparity'))    stereo.setUniquenessRatio(cv2.getTrackbarPos('uniquenessRatio','disparity'))    stereo.setSpeckleWindowSize(cv2.getTrackbarPos('speckleWindowSize','disparity'))    stereo.setSpeckleRange(cv2.getTrackbarPos('speckleRange','disparity'))    stereo.setDisp12MaxDiff(cv2.getTrackbarPos('disp12MaxDiff','disparity'))    print('computing disparity...')    disp = stereo.compute(imgL, imgR).astype(np.float32) / 16.0    cv2.imshow('left', imgL)    cv2.imshow('disparity', (disp - min_disp) / num_disp)if __name__=='__main__':    windows_size=5 #一個匹配塊的大小,大於1的奇數    min_disp=16 #最小視差值    num_disp=192-min_disp #最大視差值和最小視差值的差    blockSize=windows_size    uniquenessRatio=1    speckleRange=3 #每個已串連部分的最大視差變化    speckleWindowSize=3 #平滑視差地區的最大視窗尺寸    disp12MaxDiff=200    P1=600 #控制視差圖平滑度有第一個參數    P2=2400#第二個參數,值越大視差圖越平滑    #讀入映像    imgL=cv2.imread('../imgl.jpg')    imgR=cv2.imread('../imgr.jpg')    cv2.namedWindow('disparity')    cv2.createTrackbar('speckleRange','disparity',speckleRange,50,update)    cv2.createTrackbar('window_size','disparity',windows_size,21,update)    cv2.createTrackbar('speckleWindowSize','disparity',speckleWindowSize,200,update)    cv2.createTrackbar('uniquenessRatio','disparity',uniquenessRatio,50,update)    cv2.createTrackbar('disp12MaxDiff','disparity',disp12MaxDiff,250,update)    stereo=cv2.StereoSGBM_create(minDisparity=min_disp,                                 numDisparities=num_disp,                                 blockSize=blockSize,                                 uniquenessRatio=uniquenessRatio,                                 speckleRange=speckleRange,                                 speckleWindowSize=speckleWindowSize,                                 disp12MaxDiff=disp12MaxDiff,                                 P1=P1,                                 P2=P2)    update()    cv2.waitKey()

 

 

5 使用分水嶺和grabcut演算法進行物體分割

 A 使用brabcut進行前景檢測

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2016/12/2 11:17# @Author  : Retacn# @Site    : 使用grubCut進行前景檢測# @File    : grabcutNew.py# @Software: PyCharm__author__ = "retacn"__copyright__ = "property of mankind."__license__ = "CN"__version__ = "0.0.1"__maintainer__ = "retacn"__email__ = "zhenhuayue@sina.com"

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.