python 點雲座標 投射至 畫素座標

2021-10-09 03:11:56 字數 1556 閱讀 2890

問題: 已知某點 點雲座標 (x,y,z) 求解 投射到相面 畫素座標(v , u) -- v為畫素縱座標, u 為畫素橫座標

源**為 c++  出處:  中的 'rs2_project_point_to_pixel' 函式

python 實現如下:

注: rs2_project_point_to_pixel 中實現了多種畸變模型下的 '點雲座標 投射至 畫素座標' 之功能,  本人自用相機為 realsense d415 畸變模型為modified_brown_conrady, 故僅實現了該模型

import numpy as np

def xyz2vu(xyz,depth_cam_matrix,depth_dist_coeff=np.zeros(5)):

# 畸變型別帶新增

fx,fy=depth_cam_matrix[0,0],depth_cam_matrix[1,1]

cx,cy=depth_cam_matrix[0,2],depth_cam_matrix[1,2]

xyz=np.array(xyz).flatten()

x,y=xyz[0]/xyz[2],xyz[1]/xyz[2]

r2=x*x+y*y

f=1+depth_dist_coeff[0]*r2+depth_dist_coeff[1]*r2*r2+depth_dist_coeff[1]*r2*r2*r2

x*=f

y*=f

dx=x+2*depth_dist_coeff[2]*x*y+depth_dist_coeff[3]*(r2+2*x*x)

dy=y+2*depth_dist_coeff[3]*x*y+depth_dist_coeff[2]*(r2+2*y*y)

x,y=dx,dy

u,v=x*fx+cx,y*fy+cy

vu=np.int0([v,u])

return vu

input:

xyz: 點雲座標

depth_cam_matrix: 深度相機內參矩陣(3x3)

depth_dist_coeff : 相機畸變係數(d415 的畸變係數為[0,0,0,0,0], 故本人將該值填為np.zeros(5))

output:

畫素座標 vu

最後: 內參矩陣, 畸變係數, 以及相機的畸變模型是什麼, 去查相機的文件吧, 一般相機廠商都會提供這些引數

--------------------------------更新-------------------------------

另外 opencv 中存在相似功能函式 cv2.projectpoints, 最開始我以為該函式必須輸入 姿態相關引數(旋轉向量 rvec, tvec, 紅筆標出), 因為本人並不想求任何姿態(只想求3d點對映2d點), 但是閱讀文件後中的note(藍線標出)後發現: 可以設定 rvec = tvec = (0,0,0) 即可......, 如此便同我所實現的 xyz2vu 功能相同了.

python讀座標畫素 python如何讀取畫素值

使用image模組中的getpixel函式獲得畫素值。getpixel函式檢索指定座標點的畫素的rgb顏色值。函式原型 colorref getpixel hdc hdc,int nxpos,int nypos 引數 hdc 裝置環境控制代碼。nxpos 指定要檢查的畫素點的邏輯x軸座標。nypos...

點雲超畫素分割實驗進展

點雲超畫素分割實驗進展 點雲分割實現的粗分割階段 實驗環境 pcl1.7原始碼 vtk5.10庫 其他必要庫 官網示例 目前進展 可以檢測到293個超畫素塊,無法顯示超畫素結果和近鄰質心的連線 2016.4.11 可能存在的問題 1 pcl原始碼需要1.8版本的 2 中注釋掉一部分引起的,注釋掉nt...

OpenCV座標體系介紹以及畫素點at操作講解

雖然使用opencv已經有一段時間,但是一直沒有涉及單個畫素點的操作。今天在提取畫素點繪製水平以及數值軸直方圖時,總感覺直方圖提取反了,直到x,y座標交換才得出正確結果。出處 前言相信很多朋友在使用opencv的時候會遇到乙個小問題,且有時候對這樣的小問題沒有引起足夠的重視,或者通過表面想當然的去程...