我得到高斯图像的黑色拉普拉斯算子
I am getting black Laplacian of Guassian image
import cv2
import math
高斯函数
def gaussianblur(img,sigma):
if(sigma<0):
print("SIGMA SHOULD BE POSITIVE")
return;
用 g(x)=(1/squareroot(2*sigma*sigma*3.142)) * e^(-(x*x)/(2*sigma*sigma)) 计算一维核
deno=(((math.sqrt(2*3.142*sigma*sigma))))
k=[0,0,0,0,0]
sum=0
for x in range(-2,3):
numo=(math.exp(-((x*x)/(2*(sigma*sigma)))))
k[x+2]=(numo/deno)
sum=sum+k[x+2]
for x in range(0,5):
k[x]=(k[x]/sum)
逐行应用卷积
for i in range(0,img.shape[0]):
for j in range(2,img.shape[1]-2):
img[i,j]=abs((img[i,j-2]*k[0])+(img[i,j-1]*k[1])+(img[i,j]*k[2])+(img[i,j+1]*k[3])+(img[i,j+2]*k[4]))
return img; `#end of gaussian blur function`
主函数开始
阅读图片
dog=img = cv2.imread('art.jpg',cv2.IMREAD_GRAYSCALE)
应用第 1 次模糊
temp=img=gaussianblur(img,1)
#display image
cv2.imshow('blur1',img)
应用第二次模糊
temp=gaussianblur(temp,1)
cv2.imshow('blur2',temp)
高斯差
for i in range(0,img.shape[0]):
for j in range(0,img.shape[1]):
dog[i,j]=abs((img[i,j])-(temp[i,j]))
cv2.imshow('DoG',dog)
output
blur1
blur2
DoG
您正在覆盖此处的输入:
for i in range(0,img.shape[0]):
for j in range(2,img.shape[1]-2):
img[i,j]=abs((img[i,j-2]*k[0])+(img[i,j-1]*k[1])+(img[i,j]*k[2])+(img[i,j+1]*k[3])+(img[i,j+2]*k[4]))
尝试将结果写入新图像。
我不知道 OpenCV python 接口是如何工作的,temp=img
是否导致 temp
与 img
共享数据(例如,当您更改一个你也改变另一个)?确保你有两个不同的数据块!
import cv2
import math
高斯函数
def gaussianblur(img,sigma):
if(sigma<0):
print("SIGMA SHOULD BE POSITIVE")
return;
用 g(x)=(1/squareroot(2*sigma*sigma*3.142)) * e^(-(x*x)/(2*sigma*sigma)) 计算一维核
deno=(((math.sqrt(2*3.142*sigma*sigma))))
k=[0,0,0,0,0]
sum=0
for x in range(-2,3):
numo=(math.exp(-((x*x)/(2*(sigma*sigma)))))
k[x+2]=(numo/deno)
sum=sum+k[x+2]
for x in range(0,5):
k[x]=(k[x]/sum)
逐行应用卷积
for i in range(0,img.shape[0]):
for j in range(2,img.shape[1]-2):
img[i,j]=abs((img[i,j-2]*k[0])+(img[i,j-1]*k[1])+(img[i,j]*k[2])+(img[i,j+1]*k[3])+(img[i,j+2]*k[4]))
return img; `#end of gaussian blur function`
主函数开始
阅读图片
dog=img = cv2.imread('art.jpg',cv2.IMREAD_GRAYSCALE)
应用第 1 次模糊
temp=img=gaussianblur(img,1)
#display image
cv2.imshow('blur1',img)
应用第二次模糊
temp=gaussianblur(temp,1)
cv2.imshow('blur2',temp)
高斯差
for i in range(0,img.shape[0]):
for j in range(0,img.shape[1]):
dog[i,j]=abs((img[i,j])-(temp[i,j]))
cv2.imshow('DoG',dog)
output
blur1
blur2
DoG
您正在覆盖此处的输入:
for i in range(0,img.shape[0]):
for j in range(2,img.shape[1]-2):
img[i,j]=abs((img[i,j-2]*k[0])+(img[i,j-1]*k[1])+(img[i,j]*k[2])+(img[i,j+1]*k[3])+(img[i,j+2]*k[4]))
尝试将结果写入新图像。
我不知道 OpenCV python 接口是如何工作的,temp=img
是否导致 temp
与 img
共享数据(例如,当您更改一个你也改变另一个)?确保你有两个不同的数据块!