I am currently writing an openCV program for a pair of stereo cameras. Camera calibration and stereo calibration are in progress.
The next step is to find the position of the object in space from the two images that I get. That is why I have to stereo image rectify and do my calculations afterwards.
The problem I am encountering with initUndistortRectifyMap is this:
-If I go through R1 or R2 computed using stereoRectify() before initUndistortRectifyMap() , I get black images after reassignment.
-If I pass r (empty matrix) to initUndistortRectifyMap() , I get unrectified images after reassignment. The images I get are a little distorted.
I need to pass R1 and R2 to initUndistortRectifyMap() to fix 2 cameras, otherwise when passing through an empty matrix, the stereo heads will not rotate in the same plane.
Below is my code:
stereoRectify(intrinsic[0], distCoeffs[0], intrinsic[1], distCoeffs[1], imageSize, R, T_Stereo, R1, R2, newP1, newP2, Q, CV_CALIB_ZERO_DISPARITY, -1, imageSize); if (x_Cam.GetSerial()=="4002678487") { initUndistortRectifyMap(intrinsic[0], distCoeffs[0], R1, newP1, imageSize, CV_16SC2 , mapx1, mapy1); remap(x_Image, imageRectified[0],mapx1, mapy1, INTER_LINEAR); return imageRectified[0]; } if (x_Cam.GetSerial()=="4002702131") { //flip(in, in, -1); initUndistortRectifyMap(intrinsic[1], distCoeffs[1], R2, newP2, imageSize, CV_16SC2 , mapx2, mapy2); remap(x_Image, imageRectified[1],mapx2, mapy2, INTER_LINEAR, BORDER_CONSTANT, 0); return imageRectified[1]; }
I checked all the matrix values going to stereoRectify() and they are correct. The rotation matrices R1 and R2 seem correct. I just get black images as output.
I tried passing garbage values to initUndistortRectifyMap() for R1 and R2 (R1 * R2, for example) to see the effect simply, and I got strange results, but not black images.