2016-02-12 20:55:06 +08:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
|
|
'''
|
2016-02-24 18:09:42 +08:00
|
|
|
Watershed segmentation test
|
2016-02-12 20:55:06 +08:00
|
|
|
'''
|
|
|
|
|
|
|
|
# Python 2/3 compatibility
|
|
|
|
from __future__ import print_function
|
|
|
|
|
|
|
|
import numpy as np
|
2017-12-11 17:55:03 +08:00
|
|
|
import cv2 as cv
|
2016-02-12 20:55:06 +08:00
|
|
|
|
|
|
|
from tests_common import NewOpenCVTests
|
|
|
|
|
|
|
|
class watershed_test(NewOpenCVTests):
|
|
|
|
def test_watershed(self):
|
|
|
|
|
|
|
|
img = self.get_sample('cv/inpaint/orig.png')
|
|
|
|
markers = self.get_sample('cv/watershed/wshed_exp.png', 0)
|
|
|
|
refSegments = self.get_sample('cv/watershed/wshed_segments.png')
|
|
|
|
|
2016-02-24 18:09:42 +08:00
|
|
|
if img is None or markers is None:
|
2016-02-12 20:55:06 +08:00
|
|
|
self.assertEqual(0, 1, 'Missing test data')
|
|
|
|
|
|
|
|
colors = np.int32( list(np.ndindex(3, 3, 3)) ) * 122
|
2017-12-11 17:55:03 +08:00
|
|
|
cv.watershed(img, np.int32(markers))
|
2016-02-12 20:55:06 +08:00
|
|
|
segments = colors[np.maximum(markers, 0)]
|
|
|
|
|
2016-02-24 18:09:42 +08:00
|
|
|
if refSegments is None:
|
2016-02-12 20:55:06 +08:00
|
|
|
refSegments = segments.copy()
|
2017-12-11 17:55:03 +08:00
|
|
|
cv.imwrite(self.extraTestDataPath + '/cv/watershed/wshed_segments.png', refSegments)
|
2016-02-12 20:55:06 +08:00
|
|
|
|
2017-12-11 17:55:03 +08:00
|
|
|
self.assertLess(cv.norm(segments - refSegments, cv.NORM_L1) / 255.0, 50)
|
2017-09-03 20:01:25 +08:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
NewOpenCVTests.bootstrap()
|