 2b106db02f
			
		
	
	2b106db02f
	
	
	
		
			
			Also fixed some typos and code alignment Also adapted tutorial CPP samples Fixed some identation problems
		
			
				
	
	
		
			75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * @file SBM_Sample
 | |
|  * @brief Get a disparity map of two images
 | |
|  * @author A. Huaman
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <iostream>
 | |
| #include "opencv2/calib3d/calib3d.hpp"
 | |
| #include "opencv2/core/core.hpp"
 | |
| #include "opencv2/highgui/highgui.hpp"
 | |
| 
 | |
| using namespace cv;
 | |
| 
 | |
| const char *windowDisparity = "Disparity";
 | |
| 
 | |
| void readme();
 | |
| 
 | |
| /**
 | |
|  * @function main
 | |
|  * @brief Main function
 | |
|  */
 | |
| int main( int argc, char** argv )
 | |
| {
 | |
|   if( argc != 3 )
 | |
|   { readme(); return -1; }
 | |
| 
 | |
|   //-- 1. Read the images
 | |
|   Mat imgLeft = imread( argv[1], CV_LOAD_IMAGE_GRAYSCALE );
 | |
|   Mat imgRight = imread( argv[2], CV_LOAD_IMAGE_GRAYSCALE );
 | |
|   //-- And create the image in which we will save our disparities
 | |
|   Mat imgDisparity16S = Mat( imgLeft.rows, imgLeft.cols, CV_16S );
 | |
|   Mat imgDisparity8U = Mat( imgLeft.rows, imgLeft.cols, CV_8UC1 );
 | |
| 
 | |
|   if( !imgLeft.data || !imgRight.data )
 | |
|   { std::cout<< " --(!) Error reading images " << std::endl; return -1; }
 | |
| 
 | |
|   //-- 2. Call the constructor for StereoBM
 | |
|   int ndisparities = 16*5;   /**< Range of disparity */
 | |
|   int SADWindowSize = 21; /**< Size of the block window. Must be odd */
 | |
| 
 | |
|   StereoBM sbm( StereoBM::BASIC_PRESET,
 | |
|                                 ndisparities,
 | |
|                 SADWindowSize );
 | |
| 
 | |
|   //-- 3. Calculate the disparity image
 | |
|   sbm( imgLeft, imgRight, imgDisparity16S, CV_16S );
 | |
| 
 | |
|   //-- Check its extreme values
 | |
|   double minVal; double maxVal;
 | |
| 
 | |
|   minMaxLoc( imgDisparity16S, &minVal, &maxVal );
 | |
| 
 | |
|   printf("Min disp: %f Max value: %f \n", minVal, maxVal);
 | |
| 
 | |
|   //-- 4. Display it as a CV_8UC1 image
 | |
|   imgDisparity16S.convertTo( imgDisparity8U, CV_8UC1, 255/(maxVal - minVal));
 | |
| 
 | |
|   namedWindow( windowDisparity, WINDOW_NORMAL );
 | |
|   imshow( windowDisparity, imgDisparity8U );
 | |
| 
 | |
|   //-- 5. Save the image
 | |
|   imwrite("SBM_sample.png", imgDisparity16S);
 | |
| 
 | |
|   waitKey(0);
 | |
| 
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * @function readme
 | |
|  */
 | |
| void readme()
 | |
| { std::cout << " Usage: ./SBMSample <imgLeft> <imgRight>" << std::endl; }
 |