OpenCV的距离变换在边界附近产生奇怪的结果

时间:2011-12-22 20:41:36

标签: image-processing opencv

我注意到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.]]

0 个答案:

没有答案