gpt4 book ai didi

python - cv2.threshold 转换它不应该的细胞

转载 作者:太空宇宙 更新时间:2023-11-03 23:01:22 27 4
gpt4 key购买 nike

在下面的代码中,我有一个 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 上运行并按照 docs 中的安装说明进行操作此外,根据请求,我添加了一个更简化的修改......这似乎是有效的。不知道该怎么做 在 1 : 导入 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))

最佳答案

在当前版本中,据我所知,在最近的一些版本中它会返回

  • img(x,y),如果 img(x,y)>阈值
  • 0,否则

OpenCV docs

因此,如果您执行 cv2.threshold(img,128,1,cv2.THRSH_TOZERO),所有 128 的值都将设置为 0。如果您希望它们保持在 128,请使用 cv2.threshold(img,129,1,cv2.THRSH_TOZERO).

如果您对相同的输入获得不同的值,则可能意味着您的安装已损坏。你是如何安装 OpenCV 和什么操作系统的?你用什么版本?您是否尝试过 c 版本的代码?

我尝试使用以下代码重现您的错误。对我来说一切都很好。您能否尝试以下代码并发布您的输出。

import numpy,cv2
img=numpy.random.randint(0,255,(100,100)).astype(numpy.uint8)
img1=cv2.threshold(img,128,1,cv2.THRESH_TOZERO)

关于python - cv2.threshold 转换它不应该的细胞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376212/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com