Значение Ошибка при обработке изображения

Я работал над отбеливанием изображений в базе данных. Поскольку код огромен, я дам только ту функцию в коде, где есть ошибка -

def sample_images_raw(fname):
    image_data = cv2.imread(fname)

    patch_size = 12
    n_patches = 10000
    image_size = image_data.shape[0]
    n_images = image_data.shape[2]

    patches = np.zeros(shape=(patch_size * patch_size, n_patches))

    for i in range(n_patches):
        image_id = np.random.randint(0, n_images)
        image_x = np.random.randint(0, image_size - patch_size)
        image_y = np.random.randint(0, image_size - patch_size)

        img = image_data[:, :, image_id]
        patch = img[image_x:image_x + patch_size, image_y:image_y + patch_size].reshape(-1)
        patches[:, i] = patch

    return patches

Сообщение об ошибке, которое я получаю, выглядит примерно так:

Traceback (most recent call last):
  File "/home/moron/Project/pca/pca_gen.py", line 37, in <module>
    x = sample_images_raw(sys.argv[1])
  File "/home/moron/Project/pca/sample_images.py", line 70, in sample_images_raw
    patches[:, i] = patch

ValueError: could not broadcast input array from shape (0) into shape (144)

Я попытался изменить значение переменной patch_size на 6, и я получил следующую ошибку -

Traceback (most recent call last):
  File "/home/moron/Project/pca/pca_gen.py", line 37, in <module>
    x = sample_images_raw(sys.argv[1])
  File "/home/moron/Project/pca/sample_images.py", line 70, in sample_images_raw
    patches[:, i] = patch

ValueError: could not broadcast input array from shape (30) into shape (36)

Я пошел еще один шаг и изменил значение на 1. Компилятор тоже пошел еще один шаг, чтобы выдать следующую ошибку -

Traceback (most recent call last):
  File "/home/moron/Project/pca/pca_gen.py", line 37, in <module>
    x = sample_images_raw(sys.argv[1])
  File "/home/moron/Project/pca/sample_images.py", line 70, in sample_images_raw
    patches[:, i] = patch

ValueError: could not broadcast input array from shape (0) into shape (1)

Базы данных, над которыми я работал, были хорошо организованы, такие как лица и лица Орла 95.

Может ли кто-нибудь объяснить причину этого странного поведения компилятора и дать исправление к этому коду.

1 ответ

Похоже, вы портите размеры изображения.

замещать

image_size = image_data.shape[0]

с

image_width = image_data.shape[0]  # These might be the other
image_height = image_data.shape[1] # way round with width == 1

А потом заменить эти строки

image_x = np.random.randint(0, image_size - patch_size)
image_y = np.random.randint(0, image_size - patch_size)

с

image_x = np.random.randint(0, image_width - patch_size)
image_y = np.random.randint(0, image_height - patch_size)

Ваш текущий код пытается получить доступ к срезам вне размеров изображения (если ширина == высота), давая вам массив 0 длины.

Другие вопросы по тегам