numpy 3D数组和openCV imread对象之间的区别

时间:2018-03-10 11:01:41

标签: python-3.x image numpy opencv3.1

这是我用于为所有图像生成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。

1 个答案:

答案 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 也应该可以解决问题。