Я заметил, что distanceTransform из opencv дает странные результаты, например, следующий код:
arr = numpy.zeros((6, 6), numpy.uint8)
(distance, labels) = cv2.distanceTransform(arr, cv2.cv.CV_DIST_L1, cv2.cv.CV_DIST_MASK_PRECISE)
print 'array\n', arr
print '\ndistance\n', distance
печатает:
array
[[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 0 0]]
distance
[[ 2. 1. 1. 1. 1. 2.]
[ 1. 0. 0. 0. 0. 1.]
[ 1. 0. 0. 0. 0. 1.]
[ 1. 0. 0. 0. 0. 1.]
[ 1. 0. 0. 0. 0. 1.]
[ 2. 1. 1. 1. 1. 2.]]
Почему существуют положительные значениявозле границ?У меня даже странные результаты, когда я выполняю это:
arr = numpy.zeros((6, 6), numpy.uint8)
arr[1:-1,1:-1] = 255
(distance, labels) = cv2.distanceTransform(arr, cv2.cv.CV_DIST_L1, cv2.cv.CV_DIST_MASK_PRECISE)
distance = distance.astype(numpy.uint8)
print 'array\n', arr
print '\ndistance\n', distance
дает:
array
[[ 0 0 0 0 0 0]
[ 0 255 255 255 255 0]
[ 0 255 255 255 255 0]
[ 0 255 255 255 255 0]
[ 0 255 255 255 255 0]
[ 0 0 0 0 0 0]]
distance
[[ 8192. 8192. 8192. 8192. 8192. 8192.]
[ 8192. 8192. 8192. 8192. 8192. 8192.]
[ 8192. 8192. 8192. 8192. 8192. 8192.]
[ 8192. 8192. 8192. 8192. 8192. 8192.]
[ 8192. 8192. 8192. 8192. 8192. 8192.]
[ 8192. 8192. 8192. 8192. 8192. 8192.]]