opencv API实现
img=cv2.imread('1.jpg',1)
#卷积,边缘检测
cv2.imshow('src',img)
grayimg=cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
imgG=cv2.GaussianBlur(grayimg,(3,3),0)
dst=cv2.Canny(img,200,200)
cv2.imshow('dst',dst)
cv2.waitKey(0)
源码实现:
#源码原理 :sobel算子模板与图像矩阵进行卷积运算
img=cv2.imread('5.jpg',0)
rnum=img.shape[0]
cnum=img.shape[1]
dst=np.zeros(img.shape,np.uint8)
# SOBel算子:
# [1, 2, 1,
# 0, 0, 0,
# -1, -2, -1]
#
# [1, 0, -1,
# 2, 0, -2,
# 1, 0, -1,]
for i in range(0,rnum-2):
for j in range(0,cnum-2):
gy=img[i,j]*1+img[i,j+1]*2+img[i,j+2]*1-img[i+2,j]-2*img[i+2,j+1]-img[i+2,j+2]
gx=img[i,j]+img[i+1,j]*2+img[i+2,j]-img[i,j+2]-2*img[i+1,j+2]-img[i+2,j+2]
grad=math.sqrt(gx*gx+gy*gy)
if grad>50:
dst[i,j]=255
else:
dst[i,j]=0
cv2.imshow('dst',dst)
cv2.waitKey(0)