title: Saving an image as numpy array
body: <p>I am not able to load images into numpy array and getting an error like this...</p>
  
  <blockquote>
    <p>ValueError: could not broadcast input array from shape (175,217,3)
    into shape (100,100,3)</p>
  </blockquote>
  
  <p>The function code:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>This function is part of the file load_data.py that can be found in malaria_cell_classification_code.zip file from:</p>
  
  <p><a href="https://ceb.nlm.nih.gov/repositories/malaria-datasets/" rel="nofollow noreferrer">https://ceb.nlm.nih.gov/repositories/malaria-datasets/</a></p>
  
  <hr>
  
  <p>I tried to change X_train and Y_train to list instead of numpy array. The function halts at np.save method.</p>
  
  <pre><code>X_train = Y_train = list()
          X_train.append(img)
          Y_train.append(j)
  </code></pre>
  
  <p>What is the correct and standard way to save images in numpy?</p>
  
  <hr>
  
  <p>After resizing the image, I get different error:</p>
  
  <pre><code>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)
  &lt;ipython-input-6-8008be74f482&gt; in &lt;module&gt;()
        2 #load data for training
        3 X_train, Y_train = load_resized_training_data(img_rows, img_cols)
  ----&gt; 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 
  --&gt; 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])
  ---&gt; 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)
  &lt;ipython-input-6-8008be74f482&gt; in &lt;module&gt;()
        2 #load data for training
        3 X_train, Y_train = load_resized_training_data(img_rows, img_cols)
  ----&gt; 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 
  --&gt; 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])
  ---&gt; 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'
  </code></pre>
  
  <p>The complete script can be found here...</p>
  
  <p><a href="https://gist.github.com/shantanuo/cfe0913b367647890451f5ae3f6fb691" rel="nofollow noreferrer">https://gist.github.com/shantanuo/cfe0913b367647890451f5ae3f6fb691</a></p>