在 OpenCV 中使用 Erode
Ammar Ali
2024年2月15日
在 OpenCV 中,腐蚀使用特定的结构元素增加了图像中存在的暗区。我们可以使用 OpenCV 的 erode()
函数来查找图像的腐蚀。
在 OpenCV 中使用 erode()
函数查找图像的侵蚀
erode()
函数找到给定结构元素区域的局部最小值。
我们需要一个结构元素来找到图像的侵蚀。我们可以使用 getStructuringElement()
函数来创建特定形状的内核,例如矩形。
之后,我们需要在 erode()
函数中将给定图像与内核一起传递,它会找到给定图像的腐蚀。
例如,让我们使用 imread()
函数读取一张猫的图像,并使用 erode()
函数增加其中的暗区。
然后使用 OpenCV 的 imshow()
函数将其与原始图像一起显示。
import cv2
src_img = cv2.imread("cat.jpg")
kernel_img = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
image_erode = cv2.erode(src_img, kernel_img)
cv2.imshow("Source Img", src_img)
cv2.imshow("Eroded Img", image_erode)
cv2.waitKey()
cv2.destroyAllWindows()
我们使用 5×5 structuring
元素进行腐蚀,但我们可以使用任何大小的结构元素。结构元素的尺寸越大,暗区的增加就越大。
输出:
正如我们在右侧图像中看到的那样,根据结构元素的大小增加了暗区。
我们可以在 getStructuringElement()
函数中设置的三个可选参数是:
- 第一个参数是形状。我们在上面的代码中使用了矩形,但我们可以使用其他形状,例如使用
cv2.MORPH_CROSS
参数的十字形和使用cv2.MORPH_ELLIPSE
参数的椭圆形。 - 第二个参数是结构元素的大小。
- 最后一个参数是锚点的位置。默认情况下,锚点的位置设置为
(-1, -1)
,它对应于中心,但我们可以将其更改为元素内的任何位置。
我们可以在 erode()
函数中设置四个可选参数,它们是:
- 我们可以更改的第一个可选参数是锚点的位置,默认设置为
(-1, 1)
。 - 第二个可选参数是迭代次数,设置为 1,但我们可以设置为任意数字。
- 第三个可选参数是边框类型,默认设置为常量边框,但我们可以使用
cv2.BORDER_REFLECT
参数将其更改为其他类型,例如反射边框。检查此链接以获取有关边框类型的更多详细信息。 - 最后一个可选参数是边框的值,如果是常量边框。
如果我们想增加图像中的明亮区域而不是增加黑暗区域,我们可以使用 OpenCV 的 dilate()
函数。
作者: Ammar Ali