NumPy功能问题。不遍历所有像素

问题描述 投票:-3回答:1

我正在使用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显示了一部分像素值。

python numpy
1个回答
0
投票

除了找到你看到的奇怪错误的来源,你可以使用(只是测试它)

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)
© www.soinside.com 2019 - 2024. All rights reserved.