test_goodfeatures.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #!/usr/bin/env python
  2. # Python 2/3 compatibility
  3. from __future__ import print_function
  4. import cv2 as cv
  5. import numpy as np
  6. from tests_common import NewOpenCVTests
  7. class TestGoodFeaturesToTrack_test(NewOpenCVTests):
  8. def test_goodFeaturesToTrack(self):
  9. arr = self.get_sample('samples/data/lena.jpg', 0)
  10. original = arr.copy()
  11. threshes = [ x / 100. for x in range(1,10) ]
  12. numPoints = 20000
  13. results = dict([(t, cv.goodFeaturesToTrack(arr, numPoints, t, 2, useHarrisDetector=True)) for t in threshes])
  14. # Check that GoodFeaturesToTrack has not modified input image
  15. self.assertTrue(arr.tostring() == original.tostring())
  16. # Check for repeatability
  17. for i in range(1):
  18. results2 = dict([(t, cv.goodFeaturesToTrack(arr, numPoints, t, 2, useHarrisDetector=True)) for t in threshes])
  19. for t in threshes:
  20. self.assertTrue(len(results2[t]) == len(results[t]))
  21. for i in range(len(results[t])):
  22. self.assertTrue(cv.norm(results[t][i][0] - results2[t][i][0]) == 0)
  23. for t0,t1 in zip(threshes, threshes[1:]):
  24. r0 = results[t0]
  25. r1 = results[t1]
  26. # Increasing thresh should make result list shorter
  27. self.assertTrue(len(r0) > len(r1))
  28. # Increasing thresh should monly truncate result list
  29. for i in range(len(r1)):
  30. self.assertTrue(cv.norm(r1[i][0] - r0[i][0])==0)
  31. if __name__ == '__main__':
  32. NewOpenCVTests.bootstrap()