Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将图像另存为numpy数组_Python_Image_Numpy_Opencv_Multidimensional Array - Fatal编程技术网

Python 将图像另存为numpy数组

Python 将图像另存为numpy数组,python,image,numpy,opencv,multidimensional-array,Python,Image,Numpy,Opencv,Multidimensional Array,我无法将图像加载到numpy数组中,并出现如下错误 ValueError:无法从形状广播输入数组(175217,3) 成型(100100,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/mal

我无法将图像加载到numpy数组中,并出现如下错误

ValueError:无法从形状广播输入数组(175217,3) 成型(100100,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文件中找到:


我尝试将X_列和Y_列更改为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.
Transform targets to keras compatible format.
------------------------------
Creating validation images...
------------------------------
Parasitized 1098
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-6-8008be74f482> in <module>()
      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'


------------------------------
Creating validation images...
------------------------------
Parasitized 1098
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-6-8008be74f482> in <module>()
      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'
Done:19400/9887图像
完成:19500/9887图像
完成:19600/9887张图片
完成:19700/9887图像
完成:19800/9887图像
19842
加载完成。
将目标转换为keras兼容格式。
完成:19800/9887图像
19842
加载完成。
将目标转换为keras兼容格式。
------------------------------
正在创建验证映像。。。
------------------------------
寄生于1098
---------------------------------------------------------------------------
错误回溯(最近一次呼叫上次)
在()
2#加载培训数据
3 X\u列,Y\u列=加载调整大小的培训数据(img\u行,img\u列)
---->4 X_valid,Y_valid=加载调整大小的验证数据(img_行,img_列)
5#打印数据的形状
6打印(X_train.shape,Y_train.shape,X_valid.shape,Y_valid.shape)
~/SageMaker/疟疾检测模型/疟疾细胞分类代码/load\U data.py加载大小调整后的验证数据(img\U行,img\U列)
103 def加载调整大小的验证数据(img行、img列):
104
-->105 X_valid,Y_valid=load_validation_data()
106
107#调整图像大小
~/SageMaker/malaria detection model/malaria_cell_classification_code/load_data.py in load_validation_data()
75
76 img=np.数组([img])
--->77 img2=cv2.调整大小(img,(100100))
78 X_有效[i]=img2
79 Y_有效[i]=j
错误:OpenCV(4.0.0)/io/OpenCV/modules/imgproc/src/resize.cpp:3427:错误:(-215:断言失败)!函数“resize”中的dsize.empty()
------------------------------
正在创建验证映像。。。
------------------------------
寄生于1098
---------------------------------------------------------------------------
错误回溯(最近一次呼叫上次)
在()
2#加载培训数据
3 X\u列,Y\u列=加载调整大小的培训数据(img\u行,img\u列)
---->4 X_valid,Y_valid=加载调整大小的验证数据(img_行,img_列)
5#打印数据的形状
6打印(X_train.shape,Y_train.shape,X_valid.shape,Y_valid.shape)
~/SageMaker/疟疾检测模型/疟疾细胞分类代码/load\U data.py加载大小调整后的验证数据(img\U行,img\U列)
103 def加载调整大小的验证数据(img行、img列):
104
-->105 X_valid,Y_valid=load_validation_data()
106
107#调整图像大小
~/SageMaker/malaria detection model/malaria_cell_classification_code/load_data.py in load_validation_data()
75
76 img=np.数组([img])
--->77 img2=cv2.调整大小(img,(100100))
78 X_有效[i]=img2
79 Y_有效[i]=j
错误:OpenCV(4.0.0)/io/OpenCV/modules/imgproc/src/resize.cpp:3427:错误:(-215:断言失败)!函数“resize”中的dsize.empty()
完整的脚本可以在这里找到


opencv2已经返回一个numpy数组。不要制作新的,尤其是没有额外嵌套级别的:

img = cv2.imread(os.path.join(train_data_dir, label, image_name), cv2.IMREAD_COLOR)
img = cv2.resize(img, (100, 100))

我认为您需要在阅读图像后调整图像的大小
resized_image=cv2.resize(img,(100100))
Wait,那么原始代码中的哪一行会引发
ValueError