python - 向图像添加高斯噪声
问题描述
我正在尝试使用以下代码向某些图像添加高斯噪声
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)
但它不起作用,它给了我以下错误
Noise_image[:, :, 0] = img[:, :, 0] + gaussian ValueError: 操作数不能与形状一起广播 (315,500) (224,224)
请审查并提供反馈。
解决方案
看起来你的图像形状是(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
到每个通道。
推荐阅读
- javascript - 脚本无法在页面加载 JS 上获取元素
- python - 在 Ionic 和 Flask 中发送和保存图像时出错
- javascript - Rails 5 生产应用程序中的 Heroku JS 错误
- ios - 如何快速自动布局两个宽度相等的按钮?
- r - 如何使用 R 中的算术表达式改变数据集
- android - Google Play 管理中心开发者帐号 - 转让所有权
- windows - Vim 不在编辑器中执行插件,只在应用程序中执行
- java - 在android中Java类方法完成时设置进度条
- packet-capture - 使用带有时间戳和标志的 tshark
- c++ - 如何仅使用 pjsua2 获取设备来捕获或播放