converted houghlines to C++
authorVadim Pisarevsky <no@email>
Mon, 29 Nov 2010 14:00:21 +0000 (14:00 +0000)
committerVadim Pisarevsky <no@email>
Mon, 29 Nov 2010 14:00:21 +0000 (14:00 +0000)
samples/c/bgfg_segm.cpp [deleted file]
samples/c/houghlines.c [deleted file]
samples/c/stereo_match.cpp [deleted file]
samples/cpp/houghlines.cpp [new file with mode: 0644]

diff --git a/samples/c/bgfg_segm.cpp b/samples/c/bgfg_segm.cpp
deleted file mode 100644 (file)
index b8d7bdc..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#include <opencv2/video/background_segm.hpp>
-#include <opencv2/highgui/highgui.hpp>
-
-#include <stdio.h>
-
-//this is a sample for foreground detection functions
-int main(int argc, char** argv)
-{
-    IplImage*       tmp_frame = NULL;
-    CvCapture*      cap = NULL;
-    bool update_bg_model = true;
-
-    if( argc < 2 )
-        cap = cvCaptureFromCAM(0);
-    else
-        cap = cvCaptureFromFile(argv[1]);
-    
-    if( !cap )
-    {
-        printf("can not open camera or video file\n");
-        return -1;
-    }
-    
-    tmp_frame = cvQueryFrame(cap);
-    if(!tmp_frame)
-    {
-        printf("can not read data from the video source\n");
-        return -1;
-    }
-
-    cvNamedWindow("BG", 1);
-    cvNamedWindow("FG", 1);
-
-    CvBGStatModel* bg_model = 0;
-    
-    for( int fr = 1;tmp_frame; tmp_frame = cvQueryFrame(cap), fr++ )
-    {
-        if(!bg_model)
-        {
-            //create BG model
-            bg_model = cvCreateGaussianBGModel( tmp_frame );
-            //bg_model = cvCreateFGDStatModel( temp );
-            continue;
-        }
-        
-        double t = (double)cvGetTickCount();
-        cvUpdateBGStatModel( tmp_frame, bg_model, update_bg_model ? -1 : 0 );
-        t = (double)cvGetTickCount() - t;
-        printf( "%d. %.1f\n", fr, t/(cvGetTickFrequency()*1000.) );
-        cvShowImage("BG", bg_model->background);
-        cvShowImage("FG", bg_model->foreground);
-        char k = cvWaitKey(5);
-        if( k == 27 ) break;
-        if( k == ' ' )
-            update_bg_model = !update_bg_model;
-    }
-
-
-    cvReleaseBGStatModel( &bg_model );
-    cvReleaseCapture(&cap);
-
-    return 0;
-}
diff --git a/samples/c/houghlines.c b/samples/c/houghlines.c
deleted file mode 100644 (file)
index 6291f35..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "opencv2/highgui/highgui.hpp"
-#include "opencv2/imgproc/imgproc_c.h"
-
-int main(int argc, char** argv)
-{
-    const char* filename = argc >= 2 ? argv[1] : "pic1.png";
-    IplImage* src = cvLoadImage( filename, 0 );
-    IplImage* dst;
-    IplImage* color_dst;
-    CvMemStorage* storage = cvCreateMemStorage(0);
-    CvSeq* lines = 0;
-    int i;
-
-    if( !src )
-        return -1;
-
-    dst = cvCreateImage( cvGetSize(src), 8, 1 );
-    color_dst = cvCreateImage( cvGetSize(src), 8, 3 );
-
-    cvCanny( src, dst, 50, 200, 3 );
-    cvCvtColor( dst, color_dst, CV_GRAY2BGR );
-#if 0
-    lines = cvHoughLines2( dst, storage, CV_HOUGH_STANDARD, 1, CV_PI/180, 100, 0, 0 );
-
-    for( i = 0; i < MIN(lines->total,100); i++ )
-    {
-        float* line = (float*)cvGetSeqElem(lines,i);
-        float rho = line[0];
-        float theta = line[1];
-        CvPoint pt1, pt2;
-        double a = cos(theta), b = sin(theta);
-        double x0 = a*rho, y0 = b*rho;
-        pt1.x = cvRound(x0 + 1000*(-b));
-        pt1.y = cvRound(y0 + 1000*(a));
-        pt2.x = cvRound(x0 - 1000*(-b));
-        pt2.y = cvRound(y0 - 1000*(a));
-        cvLine( color_dst, pt1, pt2, CV_RGB(255,0,0), 3, CV_AA, 0 );
-    }
-#else
-    lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 50, 50, 10 );
-    for( i = 0; i < lines->total; i++ )
-    {
-        CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
-        cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 );
-    }
-#endif
-    cvNamedWindow( "Source", 1 );
-    cvShowImage( "Source", src );
-
-    cvNamedWindow( "Hough", 1 );
-    cvShowImage( "Hough", color_dst );
-
-    cvWaitKey(0);
-
-    return 0;
-}
-
diff --git a/samples/c/stereo_match.cpp b/samples/c/stereo_match.cpp
deleted file mode 100644 (file)
index 16ac6b2..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- *  stereo_match.cpp
- *  calibration
- *
- *  Created by Victor  Eruhimov on 1/18/10.
- *  Copyright 2010 Argus Corp. All rights reserved.
- *
- */
-
-#include "opencv2/calib3d/calib3d.hpp"
-#include "opencv2/imgproc/imgproc.hpp"
-#include "opencv2/highgui/highgui.hpp"
-
-#include <stdio.h>
-
-using namespace cv;
-
-void saveXYZ(const char* filename, const Mat& mat)
-{
-    const double max_z = 1.0e4;
-    FILE* fp = fopen(filename, "wt");
-    for(int y = 0; y < mat.rows; y++)
-    {
-        for(int x = 0; x < mat.cols; x++)
-        {
-            Vec3f point = mat.at<Vec3f>(y, x);
-            if(fabs(point[2] - max_z) < FLT_EPSILON || fabs(point[2]) > max_z) continue;
-            fprintf(fp, "%f %f %f\n", point[0], point[1], point[2]);
-        }
-    }
-    fclose(fp);
-}
-
-void print_help()
-{
-    printf("Usage: stereo_match <left_image> <right_image> [--algorithm=bm|sgbm|hh] [--blocksize=<block_size>]\n"
-           "[--max-disparity=<max_disparity>] [-i <intrinsic_filename>] [-e <extrinsic_filename>]\n"
-           "[--no-display] [-o <disparity_image>] [-p <point_cloud_file>]\n");
-}
-
-int main(int argc, char** argv)
-{
-    const char* algorithm_opt = "--algorithm=";
-    const char* maxdisp_opt = "--max-disparity=";
-    const char* blocksize_opt = "--blocksize=";
-    const char* nodisplay_opt = "--no-display=";
-    
-    if(argc < 3)
-    {
-        print_help();
-        return 0;
-    }
-    const char* img1_filename = 0;
-    const char* img2_filename = 0;
-    const char* intrinsic_filename = 0;
-    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 };
-    int alg = STEREO_SGBM;
-    int SADWindowSize = 0, numberOfDisparities = 0;
-    bool no_display = false;
-    
-    StereoBM bm;
-    StereoSGBM sgbm;
-    
-    for( int i = 1; i < argc; i++ )
-    {
-        if( argv[i][0] != '-' )
-        {
-            if( !img1_filename )
-                img1_filename = argv[i];
-            else
-                img2_filename = argv[i];
-        }
-        else if( strncmp(argv[i], algorithm_opt, strlen(algorithm_opt)) == 0 )
-        {
-            char* _alg = argv[i] + strlen(algorithm_opt);
-            alg = strcmp(_alg, "bm") == 0 ? STEREO_BM :
-                  strcmp(_alg, "sgbm") == 0 ? STEREO_SGBM :
-                  strcmp(_alg, "hh") == 0 ? STEREO_HH : -1;
-            if( alg < 0 )
-            {
-                printf("Command-line parameter error: Unknown stereo algorithm\n\n");
-                print_help();
-                return -1;
-            }
-        }
-        else if( strncmp(argv[i], maxdisp_opt, strlen(maxdisp_opt)) == 0 )
-        {
-            if( sscanf( argv[i] + strlen(maxdisp_opt), "%d", &numberOfDisparities ) != 1 ||
-                numberOfDisparities < 1 || numberOfDisparities % 16 != 0 )
-            {
-                printf("Command-line parameter error: The max disparity (--maxdisparity=<...>) must be a positive integer divisible by 16\n");
-                print_help();
-                return -1;
-            }
-        }
-        else if( strncmp(argv[i], blocksize_opt, strlen(blocksize_opt)) == 0 )
-        {
-            if( sscanf( argv[i] + strlen(blocksize_opt), "%d", &SADWindowSize ) != 1 ||
-                SADWindowSize < 1 || SADWindowSize % 2 != 1 )
-            {
-                printf("Command-line parameter error: The block size (--blocksize=<...>) must be a positive odd number\n");
-                return -1;
-            }
-        }
-        else if( strcmp(argv[i], nodisplay_opt) == 0 )
-            no_display = true;
-        else if( strcmp(argv[i], "-i" ) == 0 )
-            intrinsic_filename = argv[++i];
-        else if( strcmp(argv[i], "-e" ) == 0 )
-            extrinsic_filename = argv[++i];
-        else if( strcmp(argv[i], "-o" ) == 0 )
-            disparity_filename = argv[++i];
-        else if( strcmp(argv[i], "-p" ) == 0 )
-            point_cloud_filename = argv[++i];
-        else
-        {
-            printf("Command-line parameter error: unknown option %s\n", argv[i]);
-            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);
-    Size img_size = img1.size();
-    
-    Rect roi1, roi2;
-    Mat Q;
-    
-    if( intrinsic_filename )
-    {
-        // reading intrinsic parameters
-        FileStorage fs(intrinsic_filename, CV_STORAGE_READ);
-        if(!fs.isOpened())
-        {
-            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, -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;
-    
-    bm.state->roi1 = roi1;
-    bm.state->roi2 = roi2;
-    bm.state->preFilterCap = 31;
-    bm.state->SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 9;
-    bm.state->minDisparity = 0;
-    bm.state->numberOfDisparities = numberOfDisparities;
-    bm.state->textureThreshold = 10;
-    bm.state->uniquenessRatio = 15;
-    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;
-    sgbm.numberOfDisparities = numberOfDisparities;
-    sgbm.uniquenessRatio = 10;
-    sgbm.speckleWindowSize = bm.state->speckleWindowSize;
-    sgbm.speckleRange = bm.state->speckleRange;
-    sgbm.disp12MaxDiff = 1;
-    sgbm.fullDP = alg == STEREO_HH;
-    
-    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
-        sgbm(img1, img2, disp);
-    t = getTickCount() - t;
-    printf("Time elapsed: %fms\n", t*1000/getTickFrequency());
-
-    //disp = dispp.colRange(numberOfDisparities, img1p.cols);
-    disp.convertTo(disp8, CV_8U, 255/(numberOfDisparities*16.));
-    if( !no_display )
-    {
-        namedWindow("left", 1);
-        imshow("left", img1);
-        namedWindow("right", 1);
-        imshow("right", img2);
-        namedWindow("disparity", 0);
-        imshow("disparity", disp8);
-        printf("press any key to continue...");
-        fflush(stdout);
-        waitKey();
-        printf("\n");
-    }
-    
-    if(disparity_filename)
-        imwrite(disparity_filename, disp8);
-    
-    if(point_cloud_filename)
-    {
-        printf("storing the point cloud...");
-        fflush(stdout);
-        Mat xyz;
-        reprojectImageTo3D(disp, xyz, Q, true);
-        saveXYZ(point_cloud_filename, xyz);
-        printf("\n");
-    }
-    
-    return 0;
-}
diff --git a/samples/cpp/houghlines.cpp b/samples/cpp/houghlines.cpp
new file mode 100644 (file)
index 0000000..f6dcf12
--- /dev/null
@@ -0,0 +1,55 @@
+#include "opencv2/highgui/highgui.hpp"
+#include "opencv2/imgproc/imgproc.hpp"
+
+#include <iostream>
+
+using namespace cv;
+using namespace std;
+
+int main(int argc, char** argv)
+{
+    const char* filename = argc >= 2 ? argv[1] : "pic1.png";
+    
+    Mat src = imread(filename, 0);
+    if(src.empty())
+    {
+        cout << "can not open " << filename << endl;
+        cout << "Usage: houghlines <image_name>" << endl;
+    }
+
+    Mat dst, cdst;
+    Canny(src, dst, 50, 200, 3);
+    cvtColor(dst, cdst, CV_GRAY2BGR);
+    
+#if 0
+    vector<Vec2f> lines;
+    HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 );
+    
+    for( size_t i = 0; i < lines.size(); i++ )
+    {
+        float rho = lines[i][0], theta = lines[i][1];
+        Point pt1, pt2;
+        double a = cos(theta), b = sin(theta);
+        double x0 = a*rho, y0 = b*rho;
+        pt1.x = cvRound(x0 + 1000*(-b));
+        pt1.y = cvRound(y0 + 1000*(a));
+        pt2.x = cvRound(x0 - 1000*(-b));
+        pt2.y = cvRound(y0 - 1000*(a));
+        line( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA);
+    }
+#else
+    vector<Vec4i> lines;
+    HoughLinesP(dst, lines, 1, CV_PI/180, 50, 50, 10 );
+    for( size_t i = 0; i < lines.size(); i++ )
+    {
+        Vec4i l = lines[i];
+        line( cdst, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,0,255), 3, CV_AA);
+    }
+#endif
+    imshow("source", src);
+    imshow("detected lines", cdst);
+
+    waitKey();
+    return 0;
+}
+