边缘检测
1.边缘检测用于表示图像中连读明显的点
边缘检测分为两种:一种是基于搜索,另外一种是基于零穿越‘
2.基于搜索:是求函数的一阶导数,基于零穿越试求二阶导数的零点’
3.Sobel算子Scahrr算子是基于搜索的边缘检测
Sobel算子API:Sobel_x_or_y = cv2.Sobel(src,ddepth,dx,dy,ksize,scale
,delta,borderType)
参数:
ddepth:图像深度
dx和dy:求导的阶数,0表示这个方向上面没有导数,取值为0、1
ksize:是Sobel算子的大小,即卷积核大小,必须为1,3,5,7,默认为3
如果ksize=-1,就演变成3*3的Scahrr算子
scale:缩放导数的比例常数,默认没有
boederType:图像便捷模式,默认值为cv2.BORDER_DEFAULT
import numpy as np import cv2 as cv import matplotlib.pyplot as plt img = cv.imread('image1.jpg',1) #创建Sobel算子 Sobel_x = cv.Sobel(img,cv.CV_16S,1,0) Sobel_y = cv.Sobel(img,cv.CV_16S,0,1) #转换为uint8类型 Scale_AbsX = cv.convertScaleAbs(Sobel_x) Scale_AbsY = cv.convertScaleAbs(Sobel_y) res = cv.addWeighted(Scale_AbsX,0.5,Scale_AbsY,0.5,0) plt.imshow(res,cmap=plt.cm.gray) plt.show() #创建Scharr算子 Sobel_x1 = cv.Sobel(img,cv.CV_16S,1,0,ksize=-1) Sobel_y1 = cv.Sobel(img,cv.CV_16S,0,1,ksize=-1) #转换 Scale_AbsX = cv.convertScaleAbs(Sobel_x1) Scale_AbsY = cv.convertScaleAbs(Sobel_y1) res1 = cv.addWeighted(Scale_AbsX,0.5,Scale_AbsY,0.5,0) plt.imshow(res1,cmap=plt.cm.gray) plt.show()
2.Laplacian算子是基于零穿越的边缘检测
API:laplacian = cv2.Laplacian(src,ddepth[,dst[,ksize[,scale[,selta
[,bordeType]]]]])
参数:
src:输入的图像
ddepth:图像深度,cv.CV.16S
import numpy as np import cv2 as cv import matplotlib.pyplot as plt img = cv.imread('image1.jpg', 0) #拉普拉斯算子 res = cv.Laplacian(img,cv.CV_16S) #转换为uint8 img_laplacian = cv.convertScaleAbs(res) plt.imshow(img_laplacian,cmap=plt.cm.gray) plt.show()
3.Canny算子
Canny边缘检测算法由四步组成:
1)噪声去除:5*5高斯滤波器取出去除噪声
2)计算图像梯度
3)非极大值抑制
4)滞后阈值:设计两个阈值,maxVal和minVal,灰度梯高于maxVal
被认为是真的边界,低于minVal呗抛弃,如果在之间就是边界点相连
2.API:canny:cv2.Canny(image,threshold1,threshold2)
参数:
threshold1:minval,较小的阈值将间断的边缘连接起来
threshold2:maxval,较大的阈值检测图像中明显的边缘
import numpy as np import cv2 as cv import matplotlib.pyplot as plt img = cv.imread('image1.jpg', 0) #Canny边缘检测 res = cv.Canny(img,0,100)#阈值 plt.imshow(res,cmap=plt.cm.gray) plt.show()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!