python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > OpenCV 形态学变换

OpenCV 形态学变换的实现示例

作者:PyAIExplorer

本文主要介绍了使用OpenCV进行常见的形态学变换操作,这些操作在图像预处理、特征提取等任务中非常有用,具有一定的参考价值,感兴趣的可以了解一下

一、引言

在计算机视觉领域,形态学变换是一种基于图像形状的简单操作,常用于图像预处理、特征提取等任务。OpenCV 作为一个强大的计算机视觉库,提供了丰富的形态学变换函数。本文将详细介绍 OpenCV 中常见的形态学变换操作,并通过 Python 代码展示如何对一张猫咪图像进行这些操作。

二、环境准备

在运行代码之前,你需要安装 OpenCV 库。可以使用以下命令进行安装:

pip install opencv-python

三、代码实现

1. 导入必要的库

import cv2
import numpy as np

2. 腐蚀操作

腐蚀操作会使图像中的前景物体变小,通常用于去除小的噪声点。

二值图腐蚀后白色像素(非0)变少了。

# 腐蚀
def test001():
    img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE)
    kernel = np.ones((3, 3), np.uint8)
    # img_erode=cv2.erode(img,kernel=kernel,iterations=2)
    img_erode = cv2.erode(img, kernel=kernel)
    img_erode = cv2.erode(img_erode, kernel=kernel)
    cv2.imshow("img", img)
    cv2.imshow("img_erode", img_erode)
    cv2.waitKey(0)

3. 膨胀操作

膨胀操作会使图像中的前景物体变大,通常用于连接断裂的物体。

二值图膨胀后白色像素变多了。

# 膨胀
def test002():
    img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE)
    kernel = np.ones((3, 3), np.uint8)
    img_dilate = cv2.dilate(img, kernel=kernel, iterations=2)
    cv2.imshow("img", img)
    cv2.imshow("img_dilate", img_dilate)
    cv2.waitKey(0)

4. 开运算

开运算先进行腐蚀操作,再进行膨胀操作,常用于去除小的前景物体。

# 开运算:先腐蚀后膨胀
def test003():
    img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE)
    kernel = np.ones((3, 3), np.uint8)
    img_open = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel=kernel)
    cv2.imshow("img", img)
    cv2.imshow("img_open", img_open)
    cv2.waitKey(0)

5. 闭运算

闭运算先进行膨胀操作,再进行腐蚀操作,常用于填充前景物体内部的小孔。

# 闭运算:先膨胀后腐蚀
def test004():
    img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE)
    kernel = np.ones((3, 3), np.uint8)
    img_close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel=kernel)
    cv2.imshow("img", img)
    cv2.imshow("img_close", img_close)
    cv2.waitKey(0)

6. 礼帽操作

礼帽操作是原始图像与开运算结果之差,常用于突出图像中的噪声点。

# 礼帽:原始图像与开运算之差
def test005():
    img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE)
    kernel = np.ones((3, 3), np.uint8)
    img_tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel=kernel)
    cv2.imshow("img", img)
    cv2.imshow("img_tophat", img_tophat)
    cv2.waitKey(0)

7. 黑帽操作

黑帽操作是闭运算结果与原始图像之差,常用于突出图像中的小孔。

# 黑帽:闭运算与原始图像之差
def test006():
    img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE)
    kernel = np.ones((3, 3), np.uint8)
    img_blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel=kernel)
    cv2.imshow("img", img)
    cv2.imshow("img_blackhat", img_blackhat)
    cv2.waitKey(0)

8. 形态学梯度操作

形态学梯度操作是膨胀结果与腐蚀结果之差,常用于突出图像的边缘。

# 形态学梯度:膨胀与腐蚀之差
def test007():
    img = cv2.imread("./opencv_work/src/cat.jpg", cv2.IMREAD_GRAYSCALE)
    kernel = np.ones((3, 3), np.uint8)
    img2 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
    cv2.imshow("img", img)
    cv2.imshow("img2", img2)
    cv2.waitKey(0)

9. 主函数调用

if __name__ == '__main__':
    # test001()
    # test002()
    # test003()
    # test004()
    # test005()
    # test006()
    test007()

四、代码解释

五、总结

通过本文的介绍,你学会了如何使用 OpenCV 进行常见的形态学变换操作。这些操作在图像预处理、特征提取等任务中非常有用。你可以根据自己的需求选择合适的形态学变换操作,对图像进行处理。

到此这篇关于OpenCV 形态学变换的实现示例的文章就介绍到这了,更多相关OpenCV 形态学变换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文