OpenCV Python入门教程实际操作:图像阈值
原创OpenCV Python入门教程:图像阈值
图像阈值是一种基本的图像处理技术,它可以将图像中的像素值分为两个或多个类别。在OpenCV中,阈值操作通常用于将图像成为二值图像,即只有两个灰度级别:黑色和白色。以下是一个使用OpenCV进行图像阈值操作的入门教程。
### 环境准备
在起初之前,请确保你已经安装了Python和OpenCV。以下是在Python中安装OpenCV的命令:
bash
pip install opencv-python
### 导入必要的库
python
import cv2
import numpy as np
### 读取图像
首先,我们需要读取一张图像。这里我们使用OpenCV的`cv2.imread()`函数来加载一张图片。
python
# 读取一张图片,这里使用的是灰度模式
image = cv2.imread('path_to_image', cv2.IMREAD_GRAYSCALE)
### 阈值操作
OpenCV提供了多种阈值操作方法,其中最常用的是`cv2.threshold()`函数。这个函数需要三个参数:源图像、阈值和最大值。
python
# 阈值和最大值
threshold_value = 128
max_value = 255
# 应用阈值操作
_, thresholded_image = cv2.threshold(image, threshold_value, max_value, cv2.THRESH_BINARY)
在这个例子中,我们设置了阈值为128,这意味着所有大于或等于128的像素将被设置为最大值255(白色),而所有小于128的像素将被设置为0(黑色)。
### 可选参数
`cv2.threshold()`函数还接受一些可选参数,如:
- `cv2.THRESH_BINARY`: 创建一个二值图像,所有高于阈值的像素将被设置为最大值,所有低于阈值的像素将被设置为最小值。
- `cv2.THRESH_BINARY_INV`: 与`cv2.THRESH_BINARY`相反,所有高于阈值的像素将被设置为最小值,所有低于阈值的像素将被设置为最大值。
- `cv2.THRESH_TRUNC`: 所有高于阈值的像素将被设置为阈值。
- `cv2.THRESH_TOZERO`: 所有高于阈值的像素将被设置为0。
- `cv2.THRESH_TOZERO_INV`: 所有低于阈值的像素将被设置为0。
### 阈值与自适应阈值
有时,直接使用固定阈值也许不是最佳选择。在这种情况下,我们可以使用自适应阈值,它依图像中每个像素的邻域来计算阈值。
python
# 自适应阈值
adaptive_thresholded_image = cv2.adaptiveThreshold(
image,
255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY,
11,
2
)
在这个例子中,我们使用了高斯自适应方法,邻域大小为11x11,C值为2。
### 显示最终
最后,我们可以使用`cv2.imshow()`函数来显示原始图像和阈值处理后的图像。
python
# 显示原始图像
cv2.imshow('Original Image', image)
# 显示二值图像
cv2.imshow('Thresholded Image', thresholded_image)
# 显示自适应阈值图像
cv2.imshow('Adaptive Thresholded Image', adaptive_thresholded_image)
# 等待用户按键后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
### 代码总结
以下是完整的代码示例:
python
import cv2
import numpy as np
# 读取一张图片,这里使用的是灰度模式
image = cv2.imread('path_to_image', cv2.IMREAD_GRAYSCALE)
# 阈值和最大值
threshold_value = 128
max_value = 255
# 应用阈值操作
_, thresholded_image = cv2.threshold(image, threshold_value, max_value, cv2.THRESH_BINARY)
# 自适应阈值
adaptive_thresholded_image = cv2.adaptiveThreshold(
image,
255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY,
11,
2
)
# 显示原始图像
cv2.imshow('Original Image', image)
# 显示二值图像
cv2.imshow('Thresholded Image', thresholded_image)
# 显示自适应阈值图像
cv2.imshow('Adaptive Thresholded Image', adaptive_thresholded_image)
# 等待用户按键后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
通过以上教程,你现在已经了解了怎样在OpenCV中使用阈值操作。阈值操作是图像处理中的基本步骤,它在图像分割、特征提取和其他图像处理任务中非常有用。