72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
|
#!/usr/bin/python
|
||
|
import sys
|
||
|
from opencv.cv import *
|
||
|
from opencv.highgui import *
|
||
|
|
||
|
wndname = "Distance transform";
|
||
|
tbarname = "Threshold";
|
||
|
|
||
|
# The output images
|
||
|
dist = 0;
|
||
|
dist8u1 = 0;
|
||
|
dist8u2 = 0;
|
||
|
dist8u = 0;
|
||
|
dist32s = 0;
|
||
|
|
||
|
gray = 0;
|
||
|
edge = 0;
|
||
|
|
||
|
# define a trackbar callback
|
||
|
def on_trackbar( edge_thresh ):
|
||
|
|
||
|
cvThreshold( gray, edge, float(edge_thresh), float(edge_thresh), CV_THRESH_BINARY );
|
||
|
#Distance transform
|
||
|
cvDistTransform( edge, dist, CV_DIST_L2, CV_DIST_MASK_5, None, None );
|
||
|
|
||
|
cvConvertScale( dist, dist, 5000.0, 0 );
|
||
|
cvPow( dist, dist, 0.5 );
|
||
|
|
||
|
cvConvertScale( dist, dist32s, 1.0, 0.5 );
|
||
|
cvAndS( dist32s, cvScalarAll(255), dist32s, None );
|
||
|
cvConvertScale( dist32s, dist8u1, 1, 0 );
|
||
|
cvConvertScale( dist32s, dist32s, -1, 0 );
|
||
|
cvAddS( dist32s, cvScalarAll(255), dist32s, None );
|
||
|
cvConvertScale( dist32s, dist8u2, 1, 0 );
|
||
|
cvMerge( dist8u1, dist8u2, dist8u2, None, dist8u );
|
||
|
cvShowImage( wndname, dist8u );
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
edge_thresh = 100;
|
||
|
|
||
|
filename = "../c/stuff.jpg"
|
||
|
if len(sys.argv) > 1:
|
||
|
filename = sys.argv[1]
|
||
|
|
||
|
gray = cvLoadImage( filename, 0 )
|
||
|
if not gray:
|
||
|
print "Failed to load %s" % filename
|
||
|
sys.exit(-1)
|
||
|
|
||
|
# Create the output image
|
||
|
dist = cvCreateImage( cvSize(gray.width,gray.height), IPL_DEPTH_32F, 1 );
|
||
|
dist8u1 = cvCloneImage( gray );
|
||
|
dist8u2 = cvCloneImage( gray );
|
||
|
dist8u = cvCreateImage( cvSize(gray.width,gray.height), IPL_DEPTH_8U, 3 );
|
||
|
dist32s = cvCreateImage( cvSize(gray.width,gray.height), IPL_DEPTH_32S, 1 );
|
||
|
|
||
|
# Convert to grayscale
|
||
|
edge = cvCloneImage( gray );
|
||
|
|
||
|
# Create a window
|
||
|
cvNamedWindow( wndname, 1 );
|
||
|
|
||
|
# create a toolbar
|
||
|
cvCreateTrackbar( tbarname, wndname, edge_thresh, 255, on_trackbar );
|
||
|
|
||
|
# Show the image
|
||
|
on_trackbar(edge_thresh);
|
||
|
|
||
|
# Wait for a key stroke; the same function arranges events processing
|
||
|
cvWaitKey(0);
|