opencv-python 笔记搬运03:基本的边缘检测算法

opencv-python 笔记搬运03:基本的边缘检测算法

  • 二值图转换函数(cv2. Threshold( ) 函数)
  • 二值图转换函数(cv2. inRange( ) 函数)
  • 腐蚀处理函数(cv2.erode( ) 函数)
  • 膨胀处理(cv2.dilate( ) 函数)
  • 边缘检测函数(cv2.Canny( ) 函数)
  • 自定义卷积滤波
  • cv2.filter2D()函数
  • 边缘检测滤波函数 Laplacian()

二值图转换函数(cv2. Threshold( ) 函数)

该函数的成员有:
opencv-python 笔记搬运03:基本的边缘检测算法_第1张图片
通过二值化函数处理的图像能够更好的被用于腐蚀膨胀或边缘检测。

该函数的必要成员有:

r, src = cv2.threshold(img, 255, 255, cv2.THRESH_TRIANGLE)

这里的 r 是 retval (返回值) 的缩写。
注意:由于该函数有两个返回值,而只有第二个才是我们想要的图像,所以要在第二个变量之前加一个变量来接住第一个返回值。第一个返回值为得到的阈值,第二个返回值为图像
可以通过以下方法查看 r 的值:

r, src = cv2.threshold(img, 255, 255, cv2.THRESH_TRIANGLE)

print(r)

二值图转换函数(cv2. inRange( ) 函数)

该函数的成员有:
opencv-python 笔记搬运03:基本的边缘检测算法_第2张图片
第一个成员为原图像,第二个成员和第三个成员分别为上下阈值。比如,若想将一幅二值图
像中像素值在 254 到 255 之间的像素赋值为白色,其余像素赋值为黑色的话,可以用以下
写法:

mask = cv2.inRange(gray, 254, 255)

将转换前后的图像输出,得到:
opencv-python 笔记搬运03:基本的边缘检测算法_第3张图片

腐蚀处理函数(cv2.erode( ) 函数)

该函数的成员有:
opencv-python 笔记搬运03:基本的边缘检测算法_第4张图片
该函数的必要成员有:

dst = cv2.erode(img, kernel)

其中 kernel 为一个卷积核,这个卷积核一般通过以下函数生成:

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))

关于该函数的成员,具体如下:
opencv-python 笔记搬运03:基本的边缘检测算法_第5张图片
(卷积核不一定是我们平时见过最多的标准二维数组,也可以是其他的形状)

一般来说,腐蚀操作是针对二值化以后的图像进行处理的一个函数,因为这样的效果是最好
的。(当然,也可以对 BGR 格式的图像进行处理)。

对 BGR 格式图像的处理结果如下:
opencv-python 笔记搬运03:基本的边缘检测算法_第6张图片opencv-python 笔记搬运03:基本的边缘检测算法_第7张图片
可以看到黑色的区域有所扩大,但是效果并不明显。

这个函数在二值图上进行操作时,效果会变得相当明显:
操作前:
opencv-python 笔记搬运03:基本的边缘检测算法_第8张图片
opencv-python 笔记搬运03:基本的边缘检测算法_第9张图片

膨胀处理(cv2.dilate( ) 函数)

该函数的成员与 erode 函数基本一样,用法也一样。这个函数也需要在调用前自己生成一个
卷积核。

其必要成员有:

dlt = cv2.dilate(dst, kernel_1)

生成 kernel_1 的方法和上面 erode 中是一样的。
这个函数对二值图进行操作:

操作前:
opencv-python 笔记搬运03:基本的边缘检测算法_第10张图片
opencv-python 笔记搬运03:基本的边缘检测算法_第11张图片

边缘检测函数(cv2.Canny( ) 函数)

该函数的成员有:
opencv-python 笔记搬运03:基本的边缘检测算法_第12张图片
L2gradient 是计算图像梯度强度的标识。

该函数的必要参数有:

canny = cv2.Canny(dlt, 3, 9, 3) #dlt是之前膨胀处理后的输出结果

其运行结果为:

opencv-python 笔记搬运03:基本的边缘检测算法_第13张图片

自定义卷积滤波

OpenCV 提供了一种非常通用的 filter2D()函数,它运用由用户指定的任意核或卷积阵。
卷积矩阵是一个二维数组,有奇数行和奇数列,中心元素对应感兴趣的像素,其他元素
对应邻近元素,每个元素都有一个整数或浮点数值。例如:
opencv-python 笔记搬运03:基本的边缘检测算法_第14张图片
(太多了搬不动 直接上截图)
如果想知道这些卷积矩阵到底是怎么得出来的,可以图像处理教科书上去看。

cv2.filter2D()函数

cv2.filter2D()函数包括三个必要参数:
参数 1: 需要处理的图像。
参数 2: 目标图像深度 ,输入值为-1 时,目标图像和原图像深度保持一致。
参数 3: ksize 参数

import numpy as np
import cv2

src = cv2.imread('DSC_0146.jpg')
cv2.imshow("origin image",src)

kernel = np.array([[0.1, 0.1, 0.1],[0.1, 0.1, 0.1],[0.1, 0.1, 0.1]])
dst = cv2.filter2D(src, -1, kernel)

cv2.imshow('low pass filter',dst)
cv2.waitKey(0)

opencv-python 笔记搬运03:基本的边缘检测算法_第15张图片

边缘检测滤波函数 Laplacian()

将非边缘区域转为黑色,将边缘区域转为白色或其他饱和颜色。这里我们主要了解
Laplacian()函数。

cv2.Laplacian()包括两个必要参数:
参数 1: 需要处理的图像。
参数 2: 图像的深度,-1 表示采用的是与原图像相同的深度。目标图像的深度必须大
于等于原图像的深度。

举例:

import cv2

src = cv2.imread('DSC_0146.jpg')
cv2.imshow("origin image",src)

lap = cv2.Laplacian(src, -1, 5)

cv2.imshow('Laplacian',lap)
cv2.waitKey(0)

opencv-python 笔记搬运03:基本的边缘检测算法_第16张图片

你可能感兴趣的:(opencv-python 笔记搬运03:基本的边缘检测算法)