【无标题】

OpenCV图像形态学操作详解


1. 腐蚀 (cv2.erode())

腐蚀操作是一种缩小图像中前景对象的过程。

腐蚀操作通过将结构元素与图像进行卷积,只有当结构元素完全覆盖图像中的前景像素时,中心像素才会被保留,否则会被腐蚀掉。

函数原型

cv2.erode(src, kernel, iterations=1)

src: 输入图像,通常是二值图像。
kernel: 结构元素,可以自定义或使用 cv2.getStructuringElement()生成。
iterations: 腐蚀操作的次数,默认为1。

	# 读取图像
    img = cv2.imread('D:\Word\keli.jpg')
    # 定义结构元素
    kernel = np.ones((5, 5), np.uint8)
    # 腐蚀操作
    eroded = cv2.erode(img, kernel, iterations=1)
    # 保存图片
    cv2.imwrite('D:\Word\keli_eroded.jpg', eroded)
    # 显示结果
    cv2.imshow('Eroded', eroded)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

iterations=1:
在这里插入图片描述
iterations = 3:
在这里插入图片描述
iterations = 6:
在这里插入图片描述
腐蚀操作会使图像中的前景对象变小,边缘被腐蚀掉,常用于去除噪声或分离连接的对象。(这里应该是白色背景被当成了前景对象,)

2. 膨胀 (cv2.dilate())

膨胀操作与腐蚀相反,它是一种扩大图像中前景对象的过程。

膨胀操作通过将结构元素与图像进行卷积,只要结构元素与图像中的前景像素有重叠,中心像素就会被保留。
函数原型

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

src: 输入图像,通常是二值图像。
kernel: 结构元素,可以自定义或使用 cv2.getStructuringElement()生成。
iterations: 膨胀操作的次数,默认为1。

	# 读取图像
    img = cv2.imread('D:\Word\keli.jpg')
    # 定义结构元素
    kernel = np.ones((5, 5), np.uint8)
    # 腐蚀操作
    # eroded = cv2.erode(img, kernel, iterations=15)
    # 膨胀操作
    dilated = cv2.dilate(img, kernel, iterations=1)
    # 保存图片
    cv2.imwrite('D:\Word\keli_dilated.jpg', dilated)
    # 显示结果
    cv2.imshow('dilated', dilated)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

iterations=1:
在这里插入图片描述
iterations=3:
在这里插入图片描述
iterations=16:
在这里插入图片描述
膨胀操作会使图像中的前景对象变大,边缘被扩展,常用于填补前景对象中的空洞或连接断裂的对象。(这里显然是白色部分被膨胀了)

3. 开运算 (cv2.morphologyEx() with cv2.MORPH_OPEN)

开运算是先腐蚀后膨胀的组合操作。

开运算主要用于去除图像中的小噪声或分离连接的对象。

函数原型

cv2.morphologyEx(src, op, kernel)

src: 输入图像,通常是二值图像。
op: 形态学操作类型,开运算使用cv2.MORPH_OPEN。
kernel: 结构元素,可以自定义或使用 cv2.getStructuringElement() 生成。

在这里插入图片描述
开运算可以去除图像中的小噪声,同时保留图像中的主要前景对象。

4. 闭运算 (cv2.morphologyEx() with cv2.MORPH_CLOSE)

闭运算是先膨胀后腐蚀的组合操作。

闭运算主要用于填补前景对象中的小孔或连接断裂的对象。

函数原型

cv2.morphologyEx(src, op, kernel)

src: 输入图像,通常是二值图像。
op: 形态学操作类型,闭运算使用cv2.MORPH_CLOSE。
kernel: 结构元素,可以自定义或使用 cv2.getStructuringElement() 生成。

# 读取图像
    img = cv2.imread('D:\Word\keli.jpg')
    # 定义结构元素n
    kernel = np.ones((5, 5), np.uint8)
    # 闭运算
    closed_img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
    # 保存图片
    cv2.imwrite('D:\Word\keli_closed_img.jpg', closed_img)
    # 显示结果
    cv2.imshow('closed_img', closed_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

在这里插入图片描述
闭运算可以填补前景对象中的小孔,同时保留图像中的主要前景对象。

5. 形态学梯度 (cv2.morphologyEx() with cv2.MORPH_GRADIENT)

形态学梯度是膨胀图像与腐蚀图像的差值。

形态学梯度主要用于提取图像中前景对象的边缘。

函数原型

cv2.morphologyEx(src, op, kernel)

src: 输入图像,通常是二值图像。
op:形态学操作类型,形态学梯度使用 cv2.MORPH_GRADIENT。
kernel:结构元素,可以自定义或使用cv2.getStructuringElement() 生成。

# 读取图像
    img = cv2.imread('D:\Word\keli.jpg')
    # 定义结构元素n
    kernel = np.ones((5, 5), np.uint8)
    # 形态学梯度
    gratient_img = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
    # 保存图片
    cv2.imwrite('D:\Word\keli_gratient_img.jpg', gratient_img)
    # 显示结果
    cv2.imshow('gratient_img', gratient_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

在这里插入图片描述
形态学梯度可以提取图像中前景对象的边缘,常用于边缘检测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值