добавление гауссовского шума к изображению - PullRequest
0 голосов
/ 20 марта 2019

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

import numpy as np
import cv2
import glob 
mean = 0
var = 10
sigma = var ** 0.5
gaussian = np.random.normal(mean, sigma, (224, 224)) 



for image in glob.glob('/home/aub/myflower/flower_photos/dandelion/*.jpg'):
    img = cv2.imread(image)
    noisy_image = np.zeros(img.shape, np.float32)

    if len(img.shape) == 2:
        noisy_image = img + gaussian
    else:
        noisy_image[:, :, 0] = img[:, :, 0] + gaussian
        noisy_image[:, :, 1] = img[:, :, 1] + gaussian
        noisy_image[:, :, 2] = img[:, :, 2] + gaussian

        cv2.normalize(noisy_image, noisy_image, 0, 255, cv2.NORM_MINMAX, dtype=-1)
noisy_image = noisy_image.astype(np.uint8)

       cv2.imshow("img", img)
       cv2.imshow("gaussian", gaussian)
       cv2.imshow("noisy", noisy_image)
cv2.waitKey(0)

, но он не работает и выдает следующую ошибку

noisy_image[:,:, 0] = img [:,:, 0] + gaussian ValueError: операнды не могут быть переданы вместе с фигурами (315 500) (224 224)

Пожалуйста, просмотрите и оставьте отзыв.

1 Ответ

4 голосов
/ 20 марта 2019

Похоже, ваша форма изображения (315,500), а форма gaussian - (224,224).Попробуйте изменить гауссовскую инициализацию на

gaussian = np.random.normal(mean, sigma, (img.shape[0],img.shape[1])) 

Кстати: вы можете заменить эти строки

noisy_image[:, :, 0] = img[:, :, 0] + gaussian
noisy_image[:, :, 1] = img[:, :, 1] + gaussian
noisy_image[:, :, 2] = img[:, :, 2] + gaussian

на

noisy_image = img + gaussian

, что будет иметь тот же эффект:добавив gaussian к каждому каналу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...