Explore Courses Blog Tutorials Interview Questions
0 votes
in Python by (12.7k points)

I'm keen on discovering the different map of a scene. In the first place, I did sound system adjustment/calibration utilizing the accompanying code (I composed it myself with a little assistance from Google, in the wake of neglecting to track down any accommodating instructional exercises for a similar written in python for OpenCV 2.4.10).

I took pictures of a chessboard at the same time on the two cameras and saved them as left*.jpg and right*.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:




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:




retval,cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv2.stereoCalibrate(objpointsL, imgpointsL, imgpointsR, (320,240))

How would I correct the pictures? What different advances would it be advisable for me to do prior to proceeding to discover the disparity map? I read someplace that while ascertaining the uniqueness map, the features detected on the two frames should lie on a similar flat line. Kindly assist me with trip. Any assistance would be quite valued.'

1 Answer

0 votes
by (26.4k points)

You want cameraMatrix1,  distCoeffs2, distCoeffs1, cameraMatrix2 and "newCameraMatrix" also, for cv2.undistort()

With the help of cv2.getOptimalNewCameraMatrix(), you can also get "newCameraMatrix".

Kindly check the below code:

# Assuming you have left01.jpg and right01.jpg that you want to rectify

lFrame = cv2.imread('left01.jpg')

rFrame = cv2.imread('right01.jpg')

w, h = lFrame.shape[:2] # both frames should be of same shape

frames = [lFrame, rFrame]

# Params from camera calibration

camMats = [cameraMatrix1, cameraMatrix2]

distCoeffs = [distCoeffs1, distCoeffs2]

camSources = [0,1]

for src in camSources:

    distCoeffs[src][0][4] = 0.0 # use only the first 2 values in distCoeffs

# The rectification process

newCams = [0,0]

roi = [0,0]

for src in camSources:

    newCams[src], roi[src] = cv2.getOptimalNewCameraMatrix(cameraMatrix = camMats[src], 

                                                           distCoeffs = distCoeffs[src], 

                                                           imageSize = (w,h), 

                                                           alpha = 0)

rectFrames = [0,0]

for src in camSources:

        rectFrames[src] = cv2.undistort(frames[src], 



# See the results

view = np.hstack([frames[0], frames[1]])    

rectView = np.hstack([rectFrames[0], rectFrames[1]])

cv2.imshow('view', view)

cv2.imshow('rectView', rectView)

# Wait indefinitely for any keypress


Hope you got your answer, Next step is just to calculate "disparity maps"

Join the python online course fast, to learn python concepts in detail and get certified.

Related questions

0 votes
1 answer
0 votes
1 answer
0 votes
1 answer
asked Mar 21, 2021 in Python by laddulakshana (12.7k points)

Browse Categories