在下面的代码中,我有一个 8 位整数的 numpy 数组。我想对它们应用一个阈值,所以我调用cv2.threshold(img,128,1,cv2.THRSH_TOZERO)[1]
。文档表明该函数应该返回一个数组,该数组0
在每个单元格中的值都小于128
,并且每个单元格中的原始值大于或等于128
。
更奇怪的是,cv2.threshold
对于不同单元格中的相同值,它的行为似乎不同。
In [48]:img
Out[48]:
array([[128, 128, 128, ..., 133, 133, 133],
[128, 128, 128, ..., 134, 134, 134],
[128, 128, 128, ..., 136, 136, 136],
...,
[132, 132, 132, ..., 128, 128, 128],
[132, 132, 132, ..., 128, 128, 128],
[132, 132, 132, ..., 128, 128, 128]], dtype=uint8)
In [49]:imgThresh=cv2.threshold(img,128,1,cv2.THRESH_TOZERO)[1]
In[50]:imgThresh
Out[50]:
array([[ 0, 0, 0, ..., 0, 151, 133],
[ 0, 0, 0, ..., 0, 151, 133],
[ 0, 0, 0, ..., 0, 151, 133],
...,
[ 0, 0, 0, ..., 0, 151, 133],
[ 0, 0, 0, ..., 0, 151, 133],
[ 0, 0, 0, ..., 0, 151, 133]], dtype=uint8)
关于可能导致这种行为的任何想法?
编辑:我在 Ubuntu 12.04 上运行并遵循文档中的安装说明 另外,根据请求,我正在添加更简化的修改......这似乎正在工作。不知道该怎么做 In 1 :import numpy, cv2
In[2]:img=numpy.random.randint(0,255,(100,100)).astype(numpy.uint8)
In[3]:img
Out[3]:
array([[122, 192, 125, ..., 224, 138, 157],
[ 46, 90, 33, ..., 95, 251, 24],
[238, 87, 113, ..., 60, 190, 175],
...,
[ 30, 33, 100, ..., 182, 123, 79],
[ 84, 180, 34, ..., 37, 52, 194],
[ 94, 51, 96, ..., 243, 69, 241]], dtype=uint8)
In[4]:img1=cv2.threshold(img,244,1,cv2.THRESH_TOZERO)
In[5]:
Out[5]:
(244.0,
array([[ 0, 0, 0, ..., 0, 0, 0],
[ 0, 0, 0, ..., 0, 251, 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]], dtype=uint8))