我注意到opencv中的distanceTransform会产生奇怪的结果,例如以下代码:
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.]]