Stereo-Kalibrierung Opencv Python und Ungleichheit Anzeigen
Ich bin daran interessiert, die Unterschiede anzeigen einer Szene. So starten Sie mit, ich habe stereo-Kalibrierung mit dem folgenden code (ich schrieb es selbst mit ein wenig Hilfe von Google, nach nicht zu finden, jede hilfreiche tutorials für das gleiche geschrieben in python, OpenCV 2.4.10).
Ich habe Bilder von einem Schachbrett gleichzeitig auf beide Kameras und gespeichert als Links*.jpg und rechts*.jpg.
import numpy as np
import cv2
import glob
# termination criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
objp = np.zeros((6*9,3), np.float32)
objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2)
# Arrays to store object points and image points from all the images.
objpointsL = [] # 3d point in real world space
imgpointsL = [] # 2d points in image plane.
objpointsR = []
imgpointsR = []
images = glob.glob('left*.jpg')
for fname in images:
img = cv2.imread(fname)
grayL = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Find the chess board corners
ret, cornersL = cv2.findChessboardCorners(grayL, (9,6),None)
# If found, add object points, image points (after refining them)
if ret == True:
objpointsL.append(objp)
cv2.cornerSubPix(grayL,cornersL,(11,11),(-1,-1),criteria)
imgpointsL.append(cornersL)
images = glob.glob('right*.jpg')
for fname in images:
img = cv2.imread(fname)
grayR = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Find the chess board corners
ret, cornersR = cv2.findChessboardCorners(grayR, (9,6),None)
# If found, add object points, image points (after refining them)
if ret == True:
objpointsR.append(objp)
cv2.cornerSubPix(grayR,cornersR,(11,11),(-1,-1),criteria)
imgpointsR.append(cornersR)
retval,cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv2.stereoCalibrate(objpointsL, imgpointsL, imgpointsR, (320,240))
Wie kann ich das beheben die Bilder? Welche weiteren Schritte sollte ich tun, bevor Sie zu finden, die die Diskrepanz Karte? Ich habe irgendwo gelesen, dass während der Berechnung des disparitätsbildes, die Funktionen erkannt werden, die auf die beiden Rahmen liegen auf derselben horizontalen Linie. Bitte helfen Sie mir hier draußen. Jede Hilfe wäre sehr geschätzt werden.
InformationsquelleAutor Clive | 2015-01-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
müssen Sie
cameraMatrix1
,distCoeffs1
,cameraMatrix2
,distCoeffs2
und "newCameraMatrix" für cv2.undistort()erhalten Sie "newCameraMatrix" mit cv2.getOptimalNewCameraMatrix()
so, in den Rest von deinem script einfügen:
hoffe, dass bekommt Sie auf Ihrem Weg zu der nächsten Sache, die möglicherweise Berechnung "disparity maps" 😉
Referenz:
http://www.janeriksolem.net/2014/05/how-to-calibrate-camera-with-opencv-and.html
InformationsquelleAutor samkhan13
Versuchen, diesen code, den ich bereits in der Lage gewesen, um zu lösen die Fehler:
InformationsquelleAutor Edmauricio
Erstens, die Verwendung der opencv-Kalibrierung-Anwendung oder matlab calibration toolbox zur Berechnung der Parameter der Kamera. mit den Parametern können Sie korrigieren Sie Ihre Bilder.
nach der Gleichrichtung, beziehen sich auf die python-Beispiel in opencv Codebasis (samples/python/stereo_match.py) zur Berechnung des disparitätsbildes.
-1 für diese Antwort, da der Kalibrations-Parameter wurden bereits gewonnen. der Beispiel-code in
stereo_match.py
davon ausgegangen, dass die Bilder bereits korrigiert. aber das Problem hier ist, dass wir nicht noch haben die entzerrten Bilder!InformationsquelleAutor cloudtex