1.图像梯度-Sobel算子
dst = cv2.Sobel(src, ddepth, dx, dy, ksize)
- ddepth:图像的深度。输出图像的深度(可以理解为数据类型),-1表示与原图像相同的深度。
- dx和dy分别表示水平和竖直方向。当组合为dx=1,dy=0时求x方向的一阶导数,当组合为dx=0,dy=1时求y方向的一阶导数(如果同时为1,通常得不到想要的结果)
- ksize是Sobel算子的大小。可选参数)Sobel算子的大小,必须是1,3,5或者7,默认为3。求X方向和Y方向一阶导数时,卷积核分别为:
- scale:(可选参数)将梯度计算得到的数值放大的比例系数,效果通常使梯度图更亮,默认为1
- delta:(可选参数)在将目标图像存储进多维数组前,可以将每个像素值增加delta,默认为0
- borderType:(可选参数)决定图像在进行滤波操作(卷积)时边沿像素的处理方式,默认为BORDER_DEFAULT
2.图像梯度-Scharr算子(杀尔算子)
scharr算子是sobel算子的改进。
3.图像梯度-laplacian算子
可以理解算子是用来求边缘的
4.Canny边缘检测
Canny边缘检测
-
-
使用高斯滤波器,以平滑图像,滤除噪声。
-
-
-
计算图像中每个像素点的梯度强度和方向。
-
-
-
应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
-
-
-
应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
-
-
-
通过抑制孤立的弱边缘最终完成边缘检测。
-
img=cv2.imread("lena.jpg",cv2.IMREAD_GRAYSCALE)
v1=cv2.Canny(img,80,150)
v2=cv2.Canny(img,50,100)
res = np.hstack((v1,v2))
cv_show(res,'res')
5.图像金字塔
5.1 高斯金字塔
向上采样就是放大图形,向下采样就是缩小图形。
up=cv2.pyrUp(img)
up_down=cv2.pyrDown(up)
cv_show(img-up_down,'img-up_down')
5.2 拉普拉斯金字塔
down=cv2.pyrDown(img)
down_up=cv2.pyrUp(down)
l_1=img-down_up
cv_show(l_1,'l_1')
6.图像轮廓
cv2.findContours(img,mode,method)
mode:轮廓检索模式
- RETR_EXTERNAL :只检索最外面的轮廓;
- RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中;
- RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界;
- RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次;
method:轮廓逼近方法
- CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)。
- CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分。