image - 图像与内核的卷积给出白色输出
问题描述
我有一个用 3x3 高斯内核过滤图像的代码,但输出是白色的。GuassianFilter 函数有效(输出正确),但卷积函数存在问题。
会有什么问题?我再次检查了代码,但无法解决这个问题。
import math
import numpy as np
import cv2
path="funny_hats.jpg"
inputImage = cv2.imread(path,cv2.IMREAD_GRAYSCALE)
def GaussianFilter(img):
#generating 3x3 kernel
kernel = np.ones((3,3), dtype='float64')
size = 3
mean = int(size/2)
sigma = 1 # standart deviation is 1
sumAll = 0
for i in range(size):
for j in range(size):
kernel[i,j] = math.exp(-1* ((math.pow( (i-mean)/sigma, 2.0) + (math.pow((j-mean)/sigma, 2.0)) ) / (2* math.pow(sigma,2)) )) / (sigma * math.pow(2*math.pi, 1/2))
sumAll += kernel[i,j]
# normalizing kernel
for i in range(size):
for j in range(size):
kernel[i,j] /= sumAll
# Filter image with created kernel
img = convolution(img, kernel) # filtered image
print(img)
cv2.imshow('aa', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
def convolution(img, dest):
res = img
[h,w] = img.shape
[kh, kw] = dest.shape # kernel shape
kr = int(kh/2) # kernel radius
res = np.zeros(img.shape)
for i in range(0+kr,h-kr):
for j in range(0+kr,w-kr):
for k in range(-1 * kr, kr + 1):
for m in range(-1 * kr, kr + 1):
res[i,j] += dest[k,m]*img[i+k, j+m]
res[:,0] = res[:, 1]
res[:,w-1] = res[:, w-2]
res[0,:] = res[1,:]
res[h-1,:] = res[h-2,:]
return res
GaussianFilter(inputImage)
解决方案
res = img
这是错误的。您必须创建所有像素都为零(黑色)的图像。
推荐阅读
- javascript - PHP、mySQL、随机问题测验
- python - 如何使用 bump2version 创建自定义版本标签
- .htaccess - 在 .htaccess 中为 Google 字体添加过期标题
- autodesk-designautomation - JSON Files as parameter input using Forge Design Automation
- hibernate - 无法使用连接表的多对多映射保存数据
- c++ - 有例外的 RAII
- swift - 我将如何约束按钮和图像?
- php - 使用您的用户名或电子邮件填写登录字段
- flutter - Flutter Hover On Button 更改文本字母间距
- python - 返回包含特定单词的行