日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

(Python代码)通过视差图获取图片中不同物体的高度比

發布時間:2024/7/23 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (Python代码)通过视差图获取图片中不同物体的高度比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、原理

?可以推出不同物體的高度比可以通過如下公式得到:

?

??是左邊指定物體的高度(圖片中尺寸)

?是右邊指定物體的高度(圖片中尺寸)

??是左邊指定物體的平均視差值

??是右邊指定物體的平均視差值

?

2、代碼邏輯框圖

3、代碼詳解

import multiprocessing as mp import numpy as np import cv2 import time#讀取圖像 img5_L = cv2.imread('relative_height/3_a.jpg') img5_R = cv2.imread('relative_height/3_b.jpg') img_L=img5_L img_R=img5_R#功能:獲取視差圖 #輸入:兩張圖片 #輸出:視差圖 def disparity(img_L,img_R):stereo = cv2.StereoSGBM_create(numDisparities=48,blockSize=3)disparity = stereo.compute(img_L, img_R)return disparityrect_L = (310,36,521,759) #起點x,y, 增加至為w,h rect_R = (835,70,590,941)#功能:截圖 #輸入:圖片,截圖范圍 #輸出:截圖 def segment(img,rect):mask = np.zeros(img.shape[:2],np.uint8)bgdModel = np.zeros((1,65),np.float64)fgdModel = np.zeros((1,65),np.float64)cv2.grabCut(img,mask,rect,bgdModel,fgdModel,20,cv2.GC_INIT_WITH_RECT)mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')img = img*mask2[:,:,np.newaxis]return img#功能:構建高斯核sieze和sigma #輸入:size,sigma #輸出:二維數組 def gaussian_kernel_2d(kernel_size, sigma):kx = cv2.getGaussianKernel(kernel_size, sigma)ky = cv2.getGaussianKernel(kernel_size, sigma)return np.dot(kx, np.transpose(ky))#功能:彩色圖轉成灰色圖 #輸入:彩色圖img #輸出:灰色圖gray_img def color_to_gray(img):height = img.shape[0]width = img.shape[1]channels = img.shape[2]value = [0] * 3gray_img = np.zeros([height, width], np.uint8)for row in range(height):for column in range(width):for chan in range(channels):value[chan] = img[row, column, chan]R = value[2]G = value[1]B = value[0]# new_value = 0.2989 * R + 0.5870 * G + 0.1140 * Bnew_value = 0.2989 * R + 0.5870 * G + 0.1140 * B # 轉為灰度像素gray_img[row, column] = new_valuereturn gray_img#功能:獲取截圖的高度(像素之差) #輸入:img #輸出:高度 def object_height(img):point1=(0,0)point2 = (0, 0)height1=0height2=0for row in range(len(img)):for col in range(len(img[row])):if img[row][col] != 0:height1=rowpoint1=(row,col)breakfor row in range(len(img)-1,-1,-1):for col in range(len(img[row])):if img[row][col] != 0:height2=rowpoint2 = (row, col)breakheight=abs(height2-height1)return point1,point2,height# 功能:求平均視差值 # 輸入:摳圖img,視差圖disparity # 輸出:平均視差值 def average_disparity_value(img,disparity):n=0value=0for row in range(len(img)):for col in range(len(img[row])):if img[row][col] != 0:n +=1value+=disparity[row][col]return value/n#功能:估計圖片不同物體的實際高度比 #輸入:圖片img_L和img_R #輸出:圖片中不同物體的實際高度比 def height_ratio(img_L,img_R):t_start = time.clock()print('compute disparity....')disparity1=disparity(img_L,img_R)disparity1 = cv2.filter2D(disparity1, -1, gaussian_kernel_2d(16, 60))print('object segment...')pool = mp.Pool(processes=mp.cpu_count() - 1) #并行處理設置res1=pool.apply_async(segment,(img_L, rect_L))#并行處理seg_L=res1.get()res2=pool.apply_async(segment, (img_R, rect_R))#并行處理seg_R = res2.get()print('color_to_gray...')seg_L=color_to_gray(seg_L)seg_R = color_to_gray(seg_R)print('computer object height...')point1_L,point2_L,height_L=object_height(seg_L)point1_R, point2_R, height_R = object_height(seg_R)d_L=average_disparity_value(seg_L, disparity1)d_R = average_disparity_value(seg_R, disparity1)t_end = time.clock()print('數據處理用時', t_end - t_start)ratio= height_L*d_R/(height_R*d_L)return ratioif __name__ == '__main__':hei_ratio5=height_ratio(img_L,img_R)print(hei_ratio5)

?

?

?

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的(Python代码)通过视差图获取图片中不同物体的高度比的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。