Update to 2.0.0 tree from current Fremantle build
[opencv] / samples / swig_python / houghlines.py
1 #!/usr/bin/python
2 # This is a standalone program. Pass an image name as a first parameter of the program.
3
4 import sys
5 from math import sin,cos,sqrt
6 from opencv.cv import *
7 from opencv.highgui import *
8
9 # toggle between CV_HOUGH_STANDARD and CV_HOUGH_PROBILISTIC
10 USE_STANDARD=0
11
12 if __name__ == "__main__":
13     filename = "../../docs/ref/pics/building.jpg"
14     if len(sys.argv)>1:
15         filename = sys.argv[1]
16
17     src=cvLoadImage(filename, 0);
18     if not src:
19         print "Error opening image %s" % filename
20         sys.exit(-1)
21
22     dst = cvCreateImage( cvGetSize(src), 8, 1 );
23     color_dst = cvCreateImage( cvGetSize(src), 8, 3 );
24     storage = cvCreateMemStorage(0);
25     lines = 0;
26     cvCanny( src, dst, 50, 200, 3 );
27     cvCvtColor( dst, color_dst, CV_GRAY2BGR );
28
29     if USE_STANDARD:
30         lines = cvHoughLines2( dst, storage, CV_HOUGH_STANDARD, 1, CV_PI/180, 100, 0, 0 );
31
32         for i in range(min(lines.total, 100)):
33             line = lines[i]
34             rho = line[0];
35             theta = line[1];
36             pt1 = CvPoint();
37             pt2 = CvPoint();
38             a = cos(theta);
39             b = sin(theta);
40             x0 = a*rho 
41             y0 = b*rho
42             pt1.x = cvRound(x0 + 1000*(-b));
43             pt1.y = cvRound(y0 + 1000*(a));
44             pt2.x = cvRound(x0 - 1000*(-b));
45             pt2.y = cvRound(y0 - 1000*(a));
46             cvLine( color_dst, pt1, pt2, CV_RGB(255,0,0), 3, 8 );
47
48     else:
49         lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 50, 50, 10 );
50         for line in lines:
51             cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, 8 );
52
53     cvNamedWindow( "Source", 1 );
54     cvShowImage( "Source", src );
55
56     cvNamedWindow( "Hough", 1 );
57     cvShowImage( "Hough", color_dst );
58
59     cvWaitKey(0);