converted some more samples to C++
[profile/ivi/opencv.git] / samples / c / houghlines.c
1 #include "opencv2/highgui/highgui.hpp"
2 #include "opencv2/imgproc/imgproc_c.h"
3
4 int main(int argc, char** argv)
5 {
6     const char* filename = argc >= 2 ? argv[1] : "pic1.png";
7     IplImage* src = cvLoadImage( filename, 0 );
8     IplImage* dst;
9     IplImage* color_dst;
10     CvMemStorage* storage = cvCreateMemStorage(0);
11     CvSeq* lines = 0;
12     int i;
13
14     if( !src )
15         return -1;
16
17     dst = cvCreateImage( cvGetSize(src), 8, 1 );
18     color_dst = cvCreateImage( cvGetSize(src), 8, 3 );
19
20     cvCanny( src, dst, 50, 200, 3 );
21     cvCvtColor( dst, color_dst, CV_GRAY2BGR );
22 #if 0
23     lines = cvHoughLines2( dst, storage, CV_HOUGH_STANDARD, 1, CV_PI/180, 100, 0, 0 );
24
25     for( i = 0; i < MIN(lines->total,100); i++ )
26     {
27         float* line = (float*)cvGetSeqElem(lines,i);
28         float rho = line[0];
29         float theta = line[1];
30         CvPoint pt1, pt2;
31         double a = cos(theta), b = sin(theta);
32         double x0 = a*rho, y0 = b*rho;
33         pt1.x = cvRound(x0 + 1000*(-b));
34         pt1.y = cvRound(y0 + 1000*(a));
35         pt2.x = cvRound(x0 - 1000*(-b));
36         pt2.y = cvRound(y0 - 1000*(a));
37         cvLine( color_dst, pt1, pt2, CV_RGB(255,0,0), 3, CV_AA, 0 );
38     }
39 #else
40     lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 50, 50, 10 );
41     for( i = 0; i < lines->total; i++ )
42     {
43         CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
44         cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 );
45     }
46 #endif
47     cvNamedWindow( "Source", 1 );
48     cvShowImage( "Source", src );
49
50     cvNamedWindow( "Hough", 1 );
51     cvShowImage( "Hough", color_dst );
52
53     cvWaitKey(0);
54
55     return 0;
56 }
57