【问题标题】:NumPy where function issue. Does not traversal all piexlNumPy where 函数问题。不遍历所有像素
【发布时间】:2017-12-27 02:49:06
【问题描述】:

我使用 np.where 处理图像并将所有像素设置为 1 或 0。 我的代码很简单,如下

import os
import numpy as np
import matplotlib.pyplot as plt
import scipy.io as sio
import cv2

path='/home/aidata/segmentation_data/label'
files=os.listdir(path)
files.sort()
idx = 0
for afile in files:
    print idx
    idx = idx + 1
    file_path=os.path.join(path,afile)
    im = cv2.imread(file_path,0)
    im = np.where(im != 0, 1, 0)
    cv2.imwrite(file_path,im)
print 'finished'

但是,运行此代码后,我发现仍有一些像素值为 2 !?我不知道这里发生了什么,我使用 np.where(im==2) 检查这些像素的索引,它确实返回了正确的结果,但你不能只将它们更改为 1.. 有什么帮助吗? 我上传了一个原始图像的例子和从Matlab显示的部分像素值。

【问题讨论】:

  • Numpy.where 返回一个值。你需要把它分配给一些东西。
  • numpy.where 函数 here 的引用。查看 ParametersReturns 部分可以确认@wwii 所说的内容。
  • 抱歉,我在发布代码时丢失了一些东西。我已经将值返回给图像
  • 你能发布一个im的最小例子吗?
  • 当然,我在问题中添加了一个示例。

标签: python numpy


【解决方案1】:

除了找到您看到的奇怪错误的来源之外,您还可以使用(刚刚测试过)

im2 = np.sign(im)   # avoiding replacement
cv2.imwrite(file_path,im2)

或者更简洁

cv2.imwrite(file_path, np.sign(im))

而不是

im = np.where(im != 0, 1, 0)
cv2.imwrite(file_path,im)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    相关资源
    最近更新 更多