OpenCV——总结《图像处理-2》

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边缘检测

    1.    使用高斯滤波器,以平滑图像,滤除噪声。
      
    1.    计算图像中每个像素点的梯度强度和方向。
      
    1.    应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
      
    1.    应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
      
    1.    通过抑制孤立的弱边缘最终完成边缘检测。
      
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:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分。

猜你喜欢

转载自blog.csdn.net/guoguozgw/article/details/128810048
今日推荐