python - 为什么图像值不会根据阈值改变

标签 python opencv numpy

我正在使用 numpy 的 ndarray 来表示灰度图像。我正在尝试根据阈值将一些像素值更改为黑色或白色。第一个实现如下:

    bwImage = image #ndArray
    for h in range(image.shape[0]):
        for w in range(image.shape[1]):
            if image[h][w] > threshold:
                bwImage[h][w] = 0
            else:
                bwImage[h][w] = 255
    cv2.imwrite('testImg.jpg', bwImage)

当我将数组写入 testImg.jpg 时,我看到了原始图像。然后我遍历 ndArray 以检查值是否实际更改。
bwImage = image
for h in range(image.shape[0]):
    for w in range(image.shape[1]):
        if image[h][w] > threshold:
            bwImage[h][w] = 0
        else:
            bwImage[h][w] = 255
#why does this have to be here to convert it to BW?
for h in range(image.shape[0]):
    for w in range(image.shape[1]):
        print image[h][w]

cv2.imwrite('testImg.jpg', bwImage)

然后将图像保存为黑白。这是为什么?

我还尝试执行以下操作:
image[image <= threshold] = 255
image[image > threshold] = 0
cv2.imwrite('testImg.jpg', bwImage)

根据哪个语句首先确定图像的保存是全黑还是全白。有什么想法吗?

最佳答案

方法一

我尝试了没有打印语句的第一个代码片段,它工作得很好(使用 cv2 版本 3.0.0,numpy 1.9.2)。然而需要注意的两件事是

  • bwImage = image不复制图像,它只是创建另一个指向图像的指针 -> 所有对 bwImage 的修改就地完成初始image
  • 结果图像与原始灰度图像“反转”,因为您在低于阈值(暗)时分配高值(白色),反之亦然

  • 方法二

    这里的问题是,因为您正在就地进行反向阈值处理,所以您的第一个分配将所有小于阈值的值设置为 255 就地。然后,您的第二个分配将所有超过阈值(现在包括所有内容)的值分配给黑色。

    如果您想做一个非倒置阈值,只需切换运算符即可完成:
    image[image > threshold] = 255
    image[image <= threshold] = 0
    

    如果您想像 中那样进行倒置阈值处理方法一 ,您必须复制图像,然后您可以将原始图像用作蒙版,而不会破坏原始像素信息:
    image_copy = image.copy()
    image_copy[image <= threshold] = 255
    image_copy[image > threshold] = 0
    cv2.imshow('image',image_copy)
    

    关于python - 为什么图像值不会根据阈值改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32217532/

    相关文章:

    python - 读取由空行分隔的txt数据作为多个numpy数组

    python - 带有消息检查的 Django/Python assertRaises

    python - Flask-SQLAlchemy:SQLALCHEMY_ENGINE_OPTIONS 设置不正确

    python - 使用带有 Sentiment140 API 的 Urllib 将 Curl 转换为 Python

    c# - OpenCV - 创建颜色 mask

    image - 如何正确地将dicom图像转换为opencv

    c++ - 哈里斯角点坐标

    python - 混合类型的 NumPy 数组/矩阵

    python - 合并 Pandas 中多行的多列文本

    python - 灰度图像中两点之间的强度加权最小路径