我无法将图像加载到numpy数组并得到这样的错误...
ValueError:无法将形状(175,217,3)的输入数组广播为形状(100,100,3)
功能代码:
import cv2
import numpy as np
import os
train_data_dir = '/home/ec2-user/SageMaker/malaria-detection-model/malaria/training'
valid_data_dir = '/home/ec2-user/SageMaker/malaria-detection-model/malaria/validation'
# declare the number of samples in each category
nb_train_samples = 22045 # training samples
nb_valid_samples = 5513# validation samples
num_classes = 2
img_rows_orig = 100
img_cols_orig = 100
def load_training_data():
labels = os.listdir(train_data_dir)
total = len(labels)
X_train = np.ndarray((nb_train_samples, img_rows_orig, img_cols_orig, 3), dtype=np.uint8)
Y_train = np.zeros((nb_train_samples,), dtype='uint8')
i = 0
j = 0
for label in labels:
image_names_train = os.listdir(os.path.join(train_data_dir, label))
total = len(image_names_train)
print(label, total)
for image_name in image_names_train:
img = cv2.imread(os.path.join(train_data_dir, label, image_name), cv2.IMREAD_COLOR)
img = np.array([img])
X_train[i] = img
Y_train[i] = j
if i % 100 == 0:
print('Done: {0}/{1} images'.format(i, total))
i += 1
j += 1
print(i)
print('Loading done.')
np.save('imgs_train.npy', X_train, Y_train)
return X_train, Y_train
此函数是文件load_data.py的一部分,可以在以下位置的malaria_cell_classification_code.zip文件中找到:
https://ceb.nlm.nih.gov/repositories/malaria-datasets/
我试图将X_train和Y_train更改为list而不是numpy数组。该函数在np.save方法停止。
X_train = Y_train = list()
X_train.append(img)
Y_train.append(j)
在numpy中保存图像的正确和标准方法是什么?
调整图像大小后,我得到不同的错误:
Done: 19400/9887 images
Done: 19500/9887 images
Done: 19600/9887 images
Done: 19700/9887 images
Done: 19800/9887 images
19842
Loading done.
Transform targets to keras compatible format.
Done: 19800/9887 images
19842
Loading done.
error Traceback (most recent call last)
in ()
2 #load data for training
3 X_train, Y_train = load_resized_training_data(img_rows, img_cols)
----> 4 X_valid, Y_valid = load_resized_validation_data(img_rows, img_cols)
5 #print the shape of the data
6 print(X_train.shape, Y_train.shape, X_valid.shape, Y_valid.shape)
~/SageMaker/malaria-detection-model/malaria_cell_classification_code/load_data.py in load_resized_validation_data(img_rows, img_cols)
103 def load_resized_validation_data(img_rows, img_cols):
104
--> 105 X_valid, Y_valid = load_validation_data()
106
107 # Resize images
~/SageMaker/malaria-detection-model/malaria_cell_classification_code/load_data.py in load_validation_data()
75
76 img = np.array([img])
---> 77 img2 = cv2.resize(img, (100, 100))
78 X_valid[i] = img2
79 Y_valid[i] = j
error: OpenCV(4.0.0) /io/opencv/modules/imgproc/src/resize.cpp:3427: error: (-215:Assertion failed) !dsize.empty() in function 'resize'
error Traceback (most recent call last)
in ()
2 #load data for training
3 X_train, Y_train = load_resized_training_data(img_rows, img_cols)
----> 4 X_valid, Y_valid = load_resized_validation_data(img_rows, img_cols)
5 #print the shape of the data
6 print(X_train.shape, Y_train.shape, X_valid.shape, Y_valid.shape)
~/SageMaker/malaria-detection-model/malaria_cell_classification_code/load_data.py in load_resized_validation_data(img_rows, img_cols)
103 def load_resized_validation_data(img_rows, img_cols):
104
--> 105 X_valid, Y_valid = load_validation_data()
106
107 # Resize images
~/SageMaker/malaria-detection-model/malaria_cell_classification_code/load_data.py in load_validation_data()
75
76 img = np.array([img])
---> 77 img2 = cv2.resize(img, (100, 100))
78 X_valid[i] = img2
79 Y_valid[i] = j
error: OpenCV(4.0.0) /io/opencv/modules/imgproc/src/resize.cpp:3427: error: (-215:Assertion failed) !dsize.empty() in function 'resize'
完整的脚本可以在这里找到......
https://gist.github.com/shantanuo/cfe0913b367647890451f5ae3f6fb691
opencv2已经返回一个numpy数组。不要创建一个新的,特别是不具有额外嵌套级别的那个:
img = cv2.imread(os.path.join(train_data_dir, label, image_name), cv2.IMREAD_COLOR)
img = cv2.resize(img, (100, 100))
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。