opencv学习笔记(三)
腐蚀操作:
通常情况下,在进行腐蚀操作之前,我们会对图像进行二值化处理。膨胀同理。
可以用于去除图像中的噪声,平滑边缘,并缩小或消除图像中的物体。
import cv2 import numpy as np # 读取图像 image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE) # 定义腐蚀操作的结构元素(内核) kernel = np.ones((5, 5), np.uint8) # 这里使用5x5的矩形内核 # 执行腐蚀操作 eroded_image = cv2.erode(image, kernel, iterations=1) # 显示原始图像和腐蚀后的图像 cv2.imshow('Original Image', image) cv2.imshow('Eroded Image', eroded_image) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.erode()
函数的第一个参数是输入图像,第二个参数是腐蚀操作的结构元素(内核),第三个参数是迭代次数。迭代次数表示腐蚀操作的重复次数
膨胀操作:
import cv2 import numpy as np # 读取图像 image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE) # 定义膨胀操作的结构元素(内核) kernel = np.ones((5, 5), np.uint8) # 这里使用5x5的矩形内核 # 执行膨胀操作 dilated_image = cv2.dilate(image, kernel, iterations=1) # 显示原始图像和膨胀后的图像 cv2.imshow('Original Image', image) cv2.imshow('Dilated Image', dilated_image) cv2.waitKey(0) cv2.destroyAllWindows()
其中,cv2.dilate()内置参数与cv2.erode()一致,这里就不再做介绍
开运算和闭运算:
开运算是先对图像进行腐蚀操作,然后再进行膨胀操作。它主要用于去除图像中的小物体、平滑边缘、消除细小的噪声。开运算能够保持大物体的形状,但会削弱边缘。
闭运算是先对图像进行膨胀操作,然后再进行腐蚀操作。它主要用于填充图像中的小孔洞、连接相邻的物体、平滑边缘。闭运算能够保持物体的形状,但会填充物体内部的空隙。
import cv2 import numpy as np # 读取图像 image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE) # 定义结构元素(内核) kernel = np.ones((5, 5), np.uint8) # 这里使用5x5的矩形内核 # 开运算 opened_image = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel) # 闭运算 closed_image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel) # 显示原始图像、开运算结果和闭运算结果 cv2.imshow('Original Image', image) cv2.imshow('Opened Image', opened_image) cv2.imshow('Closed Image', closed_image) cv2.waitKey(0) cv2.destroyAllWindows()
在cv2.morphologyEx()
函数中,第一个参数是输入图像,第二个参数是操作类型,第三个参数是结构元素(内核),其中cv2.MORE_OPEN和cv2.MORE_CLOSE分别表示开运算和闭运算。
内核:
在上述代码中,我们定义了一个5x5的矩形内核作为形态学操作的结构元素。
结构元素是一种小的矩形或者圆形图像,用于图像形态学操作。它定义了操作的形状和大小,决定了操作的效果。
对于腐蚀操作来说,矩形内核的含义是在图像上滑动这个内核,并将内核下所有像素的最小值作为中心像素的值。也可以说,如果内核下的任何像素值为零(黑色),则中心像素被设置为零。这个过程可以使边缘变得更加锐利,减小或消除小的物体,并去除噪声。
在示例中,我们使用了一个5x5的矩形内核,它由np.ones((5, 5), np.uint8)
创建。np.ones()
函数用于创建一个由全1组成的矩阵,np.uint8
指定了矩阵的数据类型为无符号8位整数。
你可以根据需要调整内核的大小和形状,以实现不同的腐蚀效果。常见的内核形状包括矩形、椭圆和十字形。