Python OpenCV 边缘检测

1.Premitt算子:检测水平和竖直方向

2.Roberts算子:45°斜对角线                                                                                                                   Premitt算子     .....    Roberts算子

# Premitt算子

kx = np.array([
    [-1,0,1],
    [-1,0,1],
    [-1,0,1]],dtype=np.float32)
ky = np.array([
    [-1,-1,-1],
    [0,0,0],
    [1,1,1]],dtype=np.float32)
imgX = cv.filter2D(image,cv.CV_64F,kx)
imgY = cv.filter2D(image,cv.CV_64F,ky)
imgXY = np.sqrt(imgX**2 + imgY**2)   #斜着检测,等于x平方加y平方再开根号
imgXY2 = np.abs(imgX) + np.abs(imgY) #斜着检测,等于x,y直接相加

#show(np.abs(imgX))  因为可能会有负值,所以取绝对值,或者截断show(np.abs(img).clip(0,255))

# Roberts算子,同上,直接改卷积核

 3.Sobel-Feldman算子

4.Scharr算子

 

#Sober算子
imgX = cv.Sobel(image,cv.CV_64F,1,0,3)  # X方向 '1,0' 代表X水平方向, 3是卷积核大小
imgY = cv.Sobel(image,cv.CV_64F,0,1,3)  # Y方向 '0,1' 代表Y竖直方向, 3是卷积核大小
imgXY = np.abs(imgX) + np.abs(imgY)     # 斜着方向
show(imgXY.clip(0,255))

# Scharr算子
imgX = cv.Scharr(image,cv.CV_64F,1,0,3)  # X方向 '1,0' 代表X水平方向, 3是卷积核大小
imgY = cv.Scharr(image,cv.CV_64F,0,1,3)  # Y方向 '0,1' 代表Y竖直方向, 3是卷积核大小
imgXY = np.abs(imgX) + np.abs(imgY)     # 斜着方向
show(imgXY.clip(0,450))

 5.Laplacian算子

6.LOG算子

 

# Laplacian算子
img = cv.Laplacian(image,cv.CV_64F)
show(np.abs(img).clip(0,255))

# LOG算子  实质就是高斯模糊后再拉普拉斯算子
blur = cv.GaussianBlur(image,(3,3),1)
img1 = cv.img = cv.Laplacian(blur,cv.CV_64F)
show(np.abs(blur).clip(0,255))

 7.Canny算子

# Canny算子
img = cv.Canny(image,50,100)   #50位置的值决定边缘粗细,150位置的值决定轮廓的多少
show(img)

                                                                                                                                                                                                                                          

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值