openCV功能函数

形态学-腐蚀操作

cv2.erode(img, kernel, iterations=1)
img: 被处理图像
kernel: 处理图像用的盒子nxn大小
iterations: 函数运行次数

形态学-膨胀操作

cv2.dilate(img, kernel, iterations=1)

开运算和闭运算

开: 先腐蚀,再膨胀
cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.MORPH_OPEN: 开运算
闭: 先膨胀,再腐蚀
cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.MORPH_CLOSE: 闭运算

梯度运算

梯度 = 膨胀 - 腐蚀
cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

礼帽和黑帽

礼帽 = 原始输入 - 开运算结果
cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
黑帽 = 闭运算 - 原始输入
cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

图像梯度-Sobel算子

计算图像中像素点的梯度
cv2.Sobel(sec, ddepth, dx, dy, ksize)
ddepth: 图像的深度
dx和dy: 分别表示水平和竖直方向
ksize: 是Sobel算子的大小
白到黑是正数, 黑到白就是负数了,所有的负数会被截断成0,所以要取绝对值
sobelx = cv2.Sobel(sec, cv2.CV_64F, ddepth, dx, dy, ksize)
cv2.convertScaleAbs(sobelx)
分别计算x和y,再求和
cv2.addWeigthed(sobely, dx, sobely, dy, 0)
sobelx: 水平方向梯度
sobely: 竖直方向梯度
不建议直接计算x和y

Scharr算子

与Sobel算子的区别就是,计算用的矩阵中的数值比sobel中的要大,计算出来的图像梯度更明显

laplacian算子

梯度变化更敏感,对噪音点会比较敏感

Canny边缘检测

  1. 使用高斯滤波器,以平滑图像,过滤噪音
  2. 计算图像中每个像素点的梯度强度和方向
  3. 应用非极大值抑制,以消除边缘检测带来的杂散响应
  4. 应用双阈值检测,来确定真实的和潜在的边缘
  5. 通过抑制孤立的弱边缘最终完成边缘检测
cv2.Canny(img, minVal, maxVal)
minVal和maxVal: 双阈值检测的参数
高斯滤波器:中间值比较大,边缘值比较小

在Canny检测中对高斯滤波器进行归一化处理

Canny中使用的是sobel算子
非极大值抑制:线性插值法,划分方向法
双阈值检测
  1. 梯度值>maxVal,则处理为边界
  2. minVal<梯度值
  3. 梯度值

图像金字塔

  1. 高斯金字塔
    做图像特殊提取,
  2. 拉普拉斯金字塔

高斯金字塔

向下采样方法(缩小):从塔底到塔尖

cv2.pyrUp(img)
  1. 将Gi与高斯内核卷积
  2. 将所有偶数行和列去除
    向上采样方法(放大):从塔尖到塔底
cv2.pyrDown(img)
  1. 将图像在每个方向扩大为原来的两倍,新增的行和列以0填充
  2. 使用先前同样的内核(乘以4)与放大后的图像卷积,获得近似值
    注意:若先进行上采样,后进行下采样,得到的结果图像没有原始的图像效果好

拉普拉斯金字塔

Li = Gi - PyrUp(PyrDown(Gi))
拉普拉斯金字塔 = 原始图像 减去 原始图像先做向下采样后做向上采样

down = cv2.pyrDown(img)
down_up = cv2.pyrUp(down)
l_1 = img - down_up

你可能感兴趣的:(opencv,计算机视觉,图像处理)