numpy 3D 数组和 openCV imread 对象之间的区别
Difference between numpy 3D array and openCV imread object
这是我用来为所有图像生成 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。
由于到目前为止没有人回答,打开 CV 中的 imshow 显示 dtype int 和形状 (h,w,3) 的 numpy 数组,其值在 0 到 255 之间或 dtype float 和值在 0 到 1 和 shape 之间(h,w,3)。如果图像显示为白色和一些随机像素,则可能是因为值在范围 (0,255) 内但 dtype 为 float 或其他任何值。
正如@Miki 所建议的那样,将 dtype 更改为 uint 应该也可以解决问题。
这是我用来为所有图像生成 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。
由于到目前为止没有人回答,打开 CV 中的 imshow 显示 dtype int 和形状 (h,w,3) 的 numpy 数组,其值在 0 到 255 之间或 dtype float 和值在 0 到 1 和 shape 之间(h,w,3)。如果图像显示为白色和一些随机像素,则可能是因为值在范围 (0,255) 内但 dtype 为 float 或其他任何值。
正如@Miki 所建议的那样,将 dtype 更改为 uint 应该也可以解决问题。