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()