OpenCV -形态学操作

本次素材都来源于傅贤君老师

首先得先了解什么是形态学?形态学,即数学形态学(Mathematical Morphology),是图像处理过程中一个非常重要的研究方向。

1.腐蚀

目的: 提取图像分量信息最本质的形状特征。
重点: 腐蚀与膨胀。
难点: 梯度运算、形态学应用。
腐蚀: 1.将图像的边界点消除,使图像沿着边界向内收缩;2.将小于指定结构体元素的部分去除。
OpenCv提供了cv2.erode
dst=cv2.erode(src,kernel[,anchor[,iterations[,borderType[,borderValue]]]])
dst: 腐蚀后输出的目标图像
src: 是要进行腐蚀的原始图像,图像通道任意,但是图像深度必须是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一种。
kernel: 腐蚀操作时所采用的结构类型,可以自定义,也可以通过函数cv2.getStructringElement()生成
anchor: 是element结构中锚点位置默认为(-1,-1),在核的中心位置
iterations: 腐蚀操作迭代的次数,默认值为1,即只进行一次腐蚀操作
borderType: 边界样式,一般采用第一条默认值

borderValue: 边界值

erosion = cv2.erode(img,kernel)

代码;

import cv2
import numpy as np
img = cv2.imread('j.bmp')
cv2.imshow('img', img)
kernel = np.ones((3,3),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)
cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()
OpenCV -形态学操作_第1张图片

2.膨胀
膨胀: 1.膨胀操作能对图像的边界进行扩张;2.将与当前对象(前景)接触到的背景点合并到当前对象内,从而实现将图像的边界点向外扩张。
OpenCv提供了cv2.dilate dst=cv2.dilate(src,kernel[,anchor[,iterations[,borderType[,borderValue]]]])
dst: 腐蚀后输出的目标图像
src: 是要进行腐蚀的原始图像,图像通道任意,但是图像深度必须是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F中的一种。
kernel: 腐蚀操作时所采用的结构类型,可以自定义,也可以通过函数cv2.getStructringElement()生成
anchor: 是element结构中锚点位置默认为(-1,-1),在核的中心位置
iterations: 腐蚀操作迭代的次数,默认值为1,即只进行一次腐蚀操作
borderType: 边界样式,一般采用第一条默认值

import cv2
import numpy as np
img = cv2.imread('j.bmp')
cv2.imshow('img', img)
kernel = np.ones((9,9),np.uint8)
dige_erosion = cv2.dilate(img,kernel)
cv2.imshow('erosion', dige_erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

OpenCV -形态学操作_第2张图片

3.开运算

开运算操作: 先将图像腐蚀,再对腐蚀的结果进行膨胀。
目的: 去噪、计数。
OpenCv提供了cv2.morphologyEx
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

代码:
import cv2
import  numpy as np
img = cv2.imread('j.bmp')
cv2.imshow("img",img)
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

4.闭运算

闭运算操作: 先将图像膨胀,再对膨胀的结果进行腐蚀。
目的: 关闭前景物体内部的小孔;去除物体上的小黑点;将不同的前景图像进行连接。
OpenCv提供了cv2.morphologyEx
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

代码:

import cv2
import  numpy as np
img = cv2.imread('j.bmp')
cv2.imshow("img",img)
kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()


OpenCV -形态学操作_第3张图片

你可能感兴趣的:(OpenCV -形态学操作)