Opencv-Pythonノート——両目測距(一)
19682 ワード
Opencv-Pythonノート——両目測距
休暇中に着手した両目視覚の項目では、ノートは私の印象ノートに記入されています.今プロジェクトは私がCSDNの上でそれを置く必要があるため、何枚かのピクチャーが印象のノートの中から導くことができないためリンクをここに置いて、する時多くの先輩の仕事を参考にして、ここは先に一つ一つ感謝しないで、プロジェクトが次のステップをやり遂げてきっと更にブログを更新するあの時更に詳しく感謝します.イメージノートリンク
カメラの標定とキャリブレーション
ツール:Matlab、碁盤図(写真)、pythonプロセス:1、単目:1.1、python:カメラで撮影した画像を保存する;matlab:カメラキャリブレーションApp 1.2、両目各角度と位置の碁盤図を複数枚撮影し、それぞれ1.3を保存し、Matlabを導入する
オプションを選択する標定を行い、誤差が0.5 MM未満であれば許容する、データをワークスペースに保存し、変数1.4を開く.k1,k2=cameraParma.RD;p1,p2=cmameraParam.TD;k3=0; 1.5. マトリクスの取得:fx,fyはfcの2つ,cx,cyはccの2つ
操作コードを読み込みます.
分割コード:
3、キャリブレーション3.1、両目標定でカメラの各パラメータを得た後、
質問:画像の大きさと結果に影響はありますか? コードのsizeの値は影響しますか?
視差マップ生成
深さマップを擬似カラーマップに変換
3 D座標を作成
休暇中に着手した両目視覚の項目では、ノートは私の印象ノートに記入されています.今プロジェクトは私がCSDNの上でそれを置く必要があるため、何枚かのピクチャーが印象のノートの中から導くことができないためリンクをここに置いて、する時多くの先輩の仕事を参考にして、ここは先に一つ一つ感謝しないで、プロジェクトが次のステップをやり遂げてきっと更にブログを更新するあの時更に詳しく感謝します.イメージノートリンク
カメラの標定とキャリブレーション
ツール:Matlab、碁盤図(写真)、pythonプロセス:1、単目:1.1、python:カメラで撮影した画像を保存する;matlab:カメラキャリブレーションApp 1.2、両目各角度と位置の碁盤図を複数枚撮影し、それぞれ1.3を保存し、Matlabを導入する
オプションを選択する標定を行い、誤差が0.5 MM未満であれば許容する、データをワークスペースに保存し、変数1.4を開く.k1,k2=cameraParma.RD;p1,p2=cmameraParam.TD;k3=0; 1.5. マトリクスの取得:fx,fyはfcの2つ,cx,cyはccの2つ
Focal Length: fc
Principal point: cc
2、 :
2.1、Python: , ; matlab R T
3、 :
#
left_camera_matrix = np.array([[692.454591212115, 0., 305.409225800741],
[0.,669.698066026769, 264.508936113842],
[0., 0., 1.]])#done
left_distortion = np.array([[0.077081711200250,-0.220061292778494,-0.0004968108670932932,0.0006411932375060667,0.000000000000000]])#done
right_camera_matrix = np.array([[674.456695074239, 0., 306.434465883188],
[0., 650.163751797273, 256.821019862984],
[0., 0., 1.]])#done
right_distortion = np.array([[0.064970360468832,-0.336634672167974,-0.003030799919163,0.003667099404412,0.0000000000000]])#done
R=np.array([[0.999972132749184,-0.00256080461003690,-0.00701256050228641],
[0.00259579617289607,0.999984204218748,0.00498529389574570],
[0.00699968336982408,-0.00500335814702436,0.999962984734923]])#done
T = np.array([-40.0385164688697,0.190937710515179,0.0788520575321127]) # #done
size = (320,480) # #done#fixed xy
# #size
R1, R2, P1, P2, Q, validPixROI1, validPixROI2 = cv.stereoRectify(left_camera_matrix, left_distortion, right_camera_matrix, right_distortion, size, R,T)
# map
#
left_map1, left_map2 = cv.initUndistortRectifyMap(left_camera_matrix, left_distortion, R1, P1, size, cv.CV_16SC2)
right_map1, right_map2 = cv.initUndistortRectifyMap(right_camera_matrix, right_distortion, R2, P2, size, cv.CV_16SC2)
操作コードを読み込みます.
import cv2 as cv
cap=cv.VideoCapture(1)
i=0
while True:
ret,frame=cap.read()
cv.imshow('frame',frame)
if cv.waitKey(1)==ord('s'):
#frame2=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
cv.resize(frame,(640,480))# ?
cv.imwrite('G:/11hub/op/im%d.jpg'%i,frame)
i+=1
if cv.waitKey(1)==ord('q'):
break
if cv.waitKey(1)==ord('w'):
print(frame.shape)
cap.release()
cv.destroyAllWindows()
分割コード:
def divide_img(frame,i):
n=1
m=2
img = frame
h = img.shape[0]
w = img.shape[1]
dis_h=int(np.floor(h/n))
dis_w=int(np.floor(w/m))
if i==0:
sub=img[dis_h*0:dis_h*1,dis_w*0:dis_w*1,:]
if i==1:
sub=img[dis_h*0:dis_h*1,dis_w*1:dis_w*2,:]
return sub
3、キャリブレーション3.1、両目標定でカメラの各パラメータを得た後、
cv.stereoRectify( )
で補正回転マトリクスRを得、投影マトリクスP、再投影マトリクスQ 3.2、cv.initUndistortRectifyMap( )
でキャリブレーションマッピングパラメータ(left/right_map 1/2)3.3でcv.remap( )
で入力した左右の画像をキャリブレーションし、パラメータalphaは-1、01、0は自動的にスケーリングして平行移動し、有効画素を保持し、01拡大・縮小、1元の画像のすべてを表示、-1自動拡大・縮小質問:
視差マップ生成
imgL = cv.cvtColor(img1_rectified, cv.COLOR_BGR2GRAY)
imgR = cv.cvtColor(img2_rectified, cv.COLOR_BGR2GRAY) # BM
stereo = cv.StereoBM_create(numDisparities=16*num, blockSize=blockSize)#BM
disparity = stereo.compute(imgL, imgR) #
深さマップを擬似カラーマップに変換
def convertPNG(pngfile):
# READ THE DEPTH
im_depth = pngfile
#apply colormap on deoth image(image must be converted to 8-bit per pixel first)
im_color=cv.applyColorMap(cv.convertScaleAbs(im_depth,alpha=15),cv.COLORMAP_JET)#cv.convertScaleabs---
##im_color=cv.applyColorMap(im_depth,cv.COLORMAP_JET)
return im_color
3 D座標を作成