Set stricter warning rules for gcc
This commit is contained in:
@@ -16,15 +16,15 @@
|
||||
|
||||
using namespace cv;
|
||||
|
||||
void print_help()
|
||||
static void print_help()
|
||||
{
|
||||
printf("\nDemo stereo matching converting L and R images into disparity and point clouds\n");
|
||||
printf("\nDemo stereo matching converting L and R images into disparity and point clouds\n");
|
||||
printf("\nUsage: stereo_match <left_image> <right_image> [--algorithm=bm|sgbm|hh|var] [--blocksize=<block_size>]\n"
|
||||
"[--max-disparity=<max_disparity>] [--scale=scale_factor>] [-i <intrinsic_filename>] [-e <extrinsic_filename>]\n"
|
||||
"[--no-display] [-o <disparity_image>] [-p <point_cloud_file>]\n");
|
||||
}
|
||||
|
||||
void saveXYZ(const char* filename, const Mat& mat)
|
||||
static void saveXYZ(const char* filename, const Mat& mat)
|
||||
{
|
||||
const double max_z = 1.0e4;
|
||||
FILE* fp = fopen(filename, "wt");
|
||||
@@ -47,11 +47,11 @@ int main(int argc, char** argv)
|
||||
const char* blocksize_opt = "--blocksize=";
|
||||
const char* nodisplay_opt = "--no-display=";
|
||||
const char* scale_opt = "--scale=";
|
||||
|
||||
|
||||
if(argc < 3)
|
||||
{
|
||||
print_help();
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
const char* img1_filename = 0;
|
||||
const char* img2_filename = 0;
|
||||
@@ -59,17 +59,17 @@ int main(int argc, char** argv)
|
||||
const char* extrinsic_filename = 0;
|
||||
const char* disparity_filename = 0;
|
||||
const char* point_cloud_filename = 0;
|
||||
|
||||
|
||||
enum { STEREO_BM=0, STEREO_SGBM=1, STEREO_HH=2, STEREO_VAR=3 };
|
||||
int alg = STEREO_SGBM;
|
||||
int SADWindowSize = 0, numberOfDisparities = 0;
|
||||
bool no_display = false;
|
||||
float scale = 1.f;
|
||||
|
||||
|
||||
StereoBM bm;
|
||||
StereoSGBM sgbm;
|
||||
StereoVar var;
|
||||
|
||||
|
||||
for( int i = 1; i < argc; i++ )
|
||||
{
|
||||
if( argv[i][0] != '-' )
|
||||
@@ -136,29 +136,29 @@ int main(int argc, char** argv)
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if( !img1_filename || !img2_filename )
|
||||
{
|
||||
printf("Command-line parameter error: both left and right images must be specified\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
if( (intrinsic_filename != 0) ^ (extrinsic_filename != 0) )
|
||||
{
|
||||
printf("Command-line parameter error: either both intrinsic and extrinsic parameters must be specified, or none of them (when the stereo pair is already rectified)\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
if( extrinsic_filename == 0 && point_cloud_filename )
|
||||
{
|
||||
printf("Command-line parameter error: extrinsic and intrinsic parameters must be specified to compute the point cloud\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int color_mode = alg == STEREO_BM ? 0 : -1;
|
||||
Mat img1 = imread(img1_filename, color_mode);
|
||||
Mat img2 = imread(img2_filename, color_mode);
|
||||
|
||||
|
||||
if( scale != 1.f )
|
||||
{
|
||||
Mat temp1, temp2;
|
||||
@@ -168,12 +168,12 @@ int main(int argc, char** argv)
|
||||
resize(img2, temp2, Size(), scale, scale, method);
|
||||
img2 = temp2;
|
||||
}
|
||||
|
||||
|
||||
Size img_size = img1.size();
|
||||
|
||||
|
||||
Rect roi1, roi2;
|
||||
Mat Q;
|
||||
|
||||
|
||||
if( intrinsic_filename )
|
||||
{
|
||||
// reading intrinsic parameters
|
||||
@@ -183,40 +183,40 @@ int main(int argc, char** argv)
|
||||
printf("Failed to open file %s\n", intrinsic_filename);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
Mat M1, D1, M2, D2;
|
||||
fs["M1"] >> M1;
|
||||
fs["D1"] >> D1;
|
||||
fs["M2"] >> M2;
|
||||
fs["D2"] >> D2;
|
||||
|
||||
|
||||
fs.open(extrinsic_filename, CV_STORAGE_READ);
|
||||
if(!fs.isOpened())
|
||||
{
|
||||
printf("Failed to open file %s\n", extrinsic_filename);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
Mat R, T, R1, P1, R2, P2;
|
||||
fs["R"] >> R;
|
||||
fs["T"] >> T;
|
||||
|
||||
|
||||
stereoRectify( M1, D1, M2, D2, img_size, R, T, R1, R2, P1, P2, Q, CALIB_ZERO_DISPARITY, -1, img_size, &roi1, &roi2 );
|
||||
|
||||
|
||||
Mat map11, map12, map21, map22;
|
||||
initUndistortRectifyMap(M1, D1, R1, P1, img_size, CV_16SC2, map11, map12);
|
||||
initUndistortRectifyMap(M2, D2, R2, P2, img_size, CV_16SC2, map21, map22);
|
||||
|
||||
|
||||
Mat img1r, img2r;
|
||||
remap(img1, img1r, map11, map12, INTER_LINEAR);
|
||||
remap(img2, img2r, map21, map22, INTER_LINEAR);
|
||||
|
||||
|
||||
img1 = img1r;
|
||||
img2 = img2r;
|
||||
}
|
||||
|
||||
|
||||
numberOfDisparities = numberOfDisparities > 0 ? numberOfDisparities : ((img_size.width/8) + 15) & -16;
|
||||
|
||||
|
||||
bm.state->roi1 = roi1;
|
||||
bm.state->roi2 = roi2;
|
||||
bm.state->preFilterCap = 31;
|
||||
@@ -228,12 +228,12 @@ int main(int argc, char** argv)
|
||||
bm.state->speckleWindowSize = 100;
|
||||
bm.state->speckleRange = 32;
|
||||
bm.state->disp12MaxDiff = 1;
|
||||
|
||||
|
||||
sgbm.preFilterCap = 63;
|
||||
sgbm.SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 3;
|
||||
|
||||
|
||||
int cn = img1.channels();
|
||||
|
||||
|
||||
sgbm.P1 = 8*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;
|
||||
sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;
|
||||
sgbm.minDisparity = 0;
|
||||
@@ -243,31 +243,31 @@ int main(int argc, char** argv)
|
||||
sgbm.speckleRange = bm.state->speckleRange;
|
||||
sgbm.disp12MaxDiff = 1;
|
||||
sgbm.fullDP = alg == STEREO_HH;
|
||||
|
||||
var.levels = 3; // ignored with USE_AUTO_PARAMS
|
||||
var.pyrScale = 0.5; // ignored with USE_AUTO_PARAMS
|
||||
var.nIt = 25;
|
||||
var.minDisp = -numberOfDisparities;
|
||||
var.maxDisp = 0;
|
||||
var.poly_n = 3;
|
||||
var.poly_sigma = 0.0;
|
||||
var.fi = 15.0f;
|
||||
var.lambda = 0.03f;
|
||||
var.penalization = var.PENALIZATION_TICHONOV; // ignored with USE_AUTO_PARAMS
|
||||
var.cycle = var.CYCLE_V; // ignored with USE_AUTO_PARAMS
|
||||
var.flags = var.USE_SMART_ID | var.USE_AUTO_PARAMS | var.USE_INITIAL_DISPARITY | var.USE_MEDIAN_FILTERING ;
|
||||
|
||||
|
||||
var.levels = 3; // ignored with USE_AUTO_PARAMS
|
||||
var.pyrScale = 0.5; // ignored with USE_AUTO_PARAMS
|
||||
var.nIt = 25;
|
||||
var.minDisp = -numberOfDisparities;
|
||||
var.maxDisp = 0;
|
||||
var.poly_n = 3;
|
||||
var.poly_sigma = 0.0;
|
||||
var.fi = 15.0f;
|
||||
var.lambda = 0.03f;
|
||||
var.penalization = var.PENALIZATION_TICHONOV; // ignored with USE_AUTO_PARAMS
|
||||
var.cycle = var.CYCLE_V; // ignored with USE_AUTO_PARAMS
|
||||
var.flags = var.USE_SMART_ID | var.USE_AUTO_PARAMS | var.USE_INITIAL_DISPARITY | var.USE_MEDIAN_FILTERING ;
|
||||
|
||||
Mat disp, disp8;
|
||||
//Mat img1p, img2p, dispp;
|
||||
//copyMakeBorder(img1, img1p, 0, 0, numberOfDisparities, 0, IPL_BORDER_REPLICATE);
|
||||
//copyMakeBorder(img2, img2p, 0, 0, numberOfDisparities, 0, IPL_BORDER_REPLICATE);
|
||||
|
||||
|
||||
int64 t = getTickCount();
|
||||
if( alg == STEREO_BM )
|
||||
bm(img1, img2, disp);
|
||||
else if( alg == STEREO_VAR ) {
|
||||
var(img1, img2, disp);
|
||||
}
|
||||
}
|
||||
else if( alg == STEREO_SGBM || alg == STEREO_HH )
|
||||
sgbm(img1, img2, disp);
|
||||
t = getTickCount() - t;
|
||||
@@ -291,10 +291,10 @@ int main(int argc, char** argv)
|
||||
waitKey();
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
||||
if(disparity_filename)
|
||||
imwrite(disparity_filename, disp8);
|
||||
|
||||
|
||||
if(point_cloud_filename)
|
||||
{
|
||||
printf("storing the point cloud...");
|
||||
@@ -304,6 +304,6 @@ int main(int argc, char** argv)
|
||||
saveXYZ(point_cloud_filename, xyz);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user