本文来源公众号“小白学视觉”,仅用于学术分享,侵权删,干货满满。
原文链接:在OpenCV中进行图像预处理
今天,我们进一步深入,并处理在图像处理中常用的形态学操作。形态学操作用于提取区域、边缘、形状等。
什么是形态学操作?
形态学操作是在二值图像上进行的。二值图像可能包含许多不完美之处。特别是由一些简单的阈值操作产生的二值图像(如果你对阈值不熟悉,现在不用担心)可能包含许多噪声和畸变。OpenCV库中提供了不同的形态学操作来处理这些噪声和缺陷。
形态学操作生成与原始图像相同形状的图像。形态学操作将结构元素应用于输入图像。结构元素可以是任何形状。在今天的所有形态学操作中,将比较输入图像的每个像素与相邻像素以生成输出图像。
对于不同的形态学操作,比较方式有所不同。我们将详细讨论这一点。
在深入讨论问题之前,这是我们将在本教程中使用的图片:
在这里,我们导入必要的包,将图像读取为数组,并将其转换为二值图像,正如前面提到的,形态学操作应用于二值图像:
import cv2
import matplotlib.pyplot as plt
#Reading the image to an array
image = cv2.imread('practice.jpg')
#converting it to a binary image
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
这是'gray'的样子:
我们将使用这个灰度图像来观察形态学操作的工作原理。
在深入示例之前,我想创建一个3x3的内核和一个6x3的内核:
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
k