这是我用于为所有图像生成CSV文件的代码。
"""Generate data.csv from data folder in working directory. """
from cv2 import imread,cvtColor,COLOR_RGB2GRAY,resize
from os import listdir
from numpy import array,savetxt,hstack
data=[]
for c in listdir('data'):
i = listdir('data').index(c)
print('Reading',c)
for sample in listdir('data/'+c):
path = 'data/' + c + '/' + sample
img = imread(path)
#img = cvtColor(img,COLOR_RGB2GRAY)
img = resize(img,(150,150))
row = hstack([img.ravel(),i])
data.append(row)
data = array(data)
savetxt('data.csv',data,delimiter=',',fmt='%i')
我使用
恢复此数据print('Reading data...')
data = genfromtxt('data.csv',delimiter=',')
X = reshape(data[:,:-1],(data.shape[0],150,150,3))
y = data[:,-1]
print('Data: ',X.shape)
当我对此数据使用imshow
函数时,它显示带有一些随机彩色像素的白框,但是当我用imsave
保存时,它会保存正常图像。
为什么imshow
看起来有所不同?
我为这些脚本导入了numpy,opencv和os。
答案 0 :(得分:1)
由于到目前为止没有人回答它,因此打开 CV 中的 imshow 显示 dtype int 和形状 (h,w,3) 的 numpy 数组,其值介于 0 和 255 之间或 dtype float 和值介于 0 和 1 和形状 (h ,w,3)。如果图像显示为白色和一些随机像素,则可能是因为值在 (0,255) 范围内,但属于 dtype float 或其他任何值。
就像@Miki 建议的那样,将 dtype 更改为 uint 也应该可以解决问题。