-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsegmentlabeler.py
45 lines (35 loc) · 1.06 KB
/
segmentlabeler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import cv
def labelSegments( segImg ):
'''
A method to assign a numeric label to each segment (super pixel) of an image.
Parameters:
segImg - OpenCV segmented image (Canny edges, Contours etc)
Returns:
lblImg - OpenCV image with each label assigned a numberical value.
The Edge pixels will have label 0 (zero)
'''
#cv.NamedWindow("seg")
lblImg = cv.CreateMat( segImg.rows, segImg.cols, cv.CV_32F )
cv.Convert( segImg, lblImg )
mml = cv.MinMaxLoc( lblImg )
# No segments available! All pixels are set to the same type
if mml[1] == 0:
cv.Set(lblImg, 1)
return lblImg
# Scale to 0-MAX
cv.Scale( lblImg, lblImg, 2.**32/mml[1] )
# Label each segment
mml = cv.MinMaxLoc( lblImg )
nextSegLbl = 0.
while( mml[0] == 0 ):
nextSegLbl += 1
cv.FloodFill( lblImg, mml[2], nextSegLbl )
mml = cv.MinMaxLoc( lblImg )
#showImg = lblImg
#cv.Scale( showImg, showImg, 1./nextSegLbl )
#print cv.MinMaxLoc( showImg ), '\n'
#cv.ShowImage("seg", showImg)
#cv.WaitKey(100)
cv.Set( lblImg, 0, segImg )
#cv.DestroyWindow('seg')
return lblImg