opencv 形态学操作(python)

1. Opencv图像处理基础知识

Opencv是一款开源的计算机视觉库,常被应用于数字图像处理、机器视觉和深度学习等领域。Opencv的图像处理基础主要包括图像读取、图像显示、颜色空间转换、灰度化、像素操作等。

在Python中使用Opencv最先需要安装Opencv库,可以直接使用pip进行安装。

pip install opencv-python

1.1 图像读取与显示

使用Opencv读取并显示图像可以使用imread()函数和imshow()函数实现。

import cv2

# 读取图像

img = cv2.imread('test.jpg')

# 显示图像

cv2.imshow('image', img)

cv2.waitKey(0)

cv2.destroyAllWindows()

其中,imread()函数返回的是一个numpy.ndarray类型的对象,代表了一张图像,在Opencv中图像默认是以BGR颜色空间存储的。

使用imshow()函数显示图像时,第一个参数为窗口名,第二个参数为要显示的图像。

1.2 颜色空间转换与灰度化

常见的颜色空间包括RGB、HSI、HSV等。在Opencv中使用cvtColor()函数可以实现多种颜色空间的转换。

import cv2

# 读取图像

img = cv2.imread('test.jpg')

# 转换为灰度图像

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 显示灰度图像

cv2.imshow('gray_img', gray_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

在灰度化处理后,图像的通道数变成了1,每个像素的值表示的是灰度值,对于一张黑白图像来说,其所有像素点的值均为0或255。

2. Opencv形态学操作

形态学操作是数字图像处理中的一种基础算法,主要用于过滤和改变图像的形态结构,广泛应用于图像分割、轮廓检测等领域。Opencv中提供了一些形态学操作的函数,包括腐蚀、膨胀、开、闭操作等。

2.1 腐蚀操作

腐蚀操作可以使图像中较小的或者是不规则的物体消失,通常可以用来消除噪点、分离物体以及断开联通区域等操作。在Opencv中使用erode()函数实现腐蚀操作。

import cv2

import numpy as np

# 读取图像

img = cv2.imread('test.jpg')

# 转换为灰度图像

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 设置结构元素,生成一个3x3的矩形结构元素

kernel = np.ones((3,3), np.uint8)

# 腐蚀操作

erosion_img = cv2.erode(gray_img, kernel, iterations=1)

# 显示腐蚀后的图像

cv2.imshow('erosion_img', erosion_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

上述例子中,通过设置结构元素的大小来控制腐蚀的程度,iterations参数指定了腐蚀的次数。

2.2 膨胀操作

膨胀操作与腐蚀操作相反,可以使图像中较小的物体得到增强,通常可以用来填充物体内的空洞、扩大物体的面积等操作。在Opencv中使用dilate()函数实现膨胀操作。

import cv2

import numpy as np

# 读取图像

img = cv2.imread('test.jpg')

# 转换为灰度图像

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 设置结构元素,生成一个3x3的矩形结构元素

kernel = np.ones((3,3), np.uint8)

# 膨胀操作

dilate_img = cv2.dilate(gray_img, kernel, iterations=1)

# 显示膨胀后的图像

cv2.imshow('dilate_img', dilate_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

与腐蚀操作类似,通过设置结构元素和iterations参数,可以实现不同程度的膨胀操作。

2.3 开闭操作

开闭操作是腐蚀和膨胀操作的组合操作,通常可以用来消除毛刺、平滑物体边缘、分离物体内部空区等操作。在Opencv中使用morphologyEx()函数实现开闭操作。

开操作:先腐蚀后膨胀的组合操作,可以消除小物体、毛刺、较小的内部空洞等,使图像变清晰。

import cv2

import numpy as np

# 读取图像

img = cv2.imread('test.jpg')

# 转换为灰度图像

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 设置结构元素,生成一个3x3的矩形结构元素

kernel = np.ones((3,3), np.uint8)

# 开操作

opening_img = cv2.morphologyEx(gray_img, cv2.MORPH_OPEN, kernel)

# 显示开操作后的图像

cv2.imshow('opening_img', opening_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

闭操作:先膨胀后腐蚀的组合操作,可以封闭物体内部空洞、使物体边缘更加平滑。

import cv2

import numpy as np

# 读取图像

img = cv2.imread('test.jpg')

# 转换为灰度图像

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 设置结构元素,生成一个3x3的矩形结构元素

kernel = np.ones((3,3), np.uint8)

# 闭操作

closing_img = cv2.morphologyEx(gray_img, cv2.MORPH_CLOSE, kernel)

# 显示闭操作后的图像

cv2.imshow('closing_img', closing_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

3. 总结

Opencv的图像处理基础知识包括图像读取、显示、颜色空间转换和灰度化等,形态学操作则是根据图像形态结构进行处理的基础算法,主要包括腐蚀、膨胀、开、闭操作等。

import cv2

import numpy as np

# 读取图像

img = cv2.imread('test.jpg')

# 转换为灰度图像

gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 设置结构元素,生成一个3x3的矩形结构元素

kernel = np.ones((3,3), np.uint8)

# 腐蚀操作

erosion_img = cv2.erode(gray_img, kernel, iterations=1)

# 膨胀操作

dilate_img = cv2.dilate(gray_img, kernel, iterations=1)

# 开操作

opening_img = cv2.morphologyEx(gray_img, cv2.MORPH_OPEN, kernel)

# 闭操作

closing_img = cv2.morphologyEx(gray_img, cv2.MORPH_CLOSE, kernel)

# 显示图像和处理结果

cv2.imshow('image', img)

cv2.imshow('gray_img', gray_img)

cv2.imshow('erosion_img', erosion_img)

cv2.imshow('dilate_img', dilate_img)

cv2.imshow('opening_img', opening_img)

cv2.imshow('closing_img', closing_img)

cv2.waitKey(0)

cv2.destroyAllWindows()

后端开发标签