我正在使用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显示了一部分像素值。
除了找到你看到的奇怪错误的来源,你可以使用(只是测试它)
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)