图像二值化调用cv2.threshold实现五种方式的图像二值化
时间: 2024-09-09 09:03:11 浏览: 61
在Python中使用OpenCV库进行图像二值化时,可以调用`cv2.threshold`函数来实现。该函数可以根据不同的阈值处理方式将图像转换为二值图像。`cv2.threshold`函数有五种不同的类型,分别对应不同的二值化策略:
1. `cv2.THRESH_BINARY`:标准二值化。如果像素值大于阈值(`thresh`),则被设置为`maxval`;否则,被设置为0(黑色)。
2. `cv2.THRESH_BINARY_INV`:反转的二值化。如果像素值小于阈值(`thresh`),则被设置为`maxval`;否则,被设置为0。
3. `cv2.THRESH_TRUNC`:截断二值化。如果像素值大于阈值(`thresh`),像素值被设置为阈值;否则,保持原值。
4. `cv2.THRESH_TOZERO`:向零二值化。如果像素值大于阈值(`thresh`),像素值保持不变;否则,被设置为0。
5. `cv2.THRESH_TOZERO_INV`:反转的向零二值化。如果像素值小于阈值(`thresh`),像素值保持不变;否则,被设置为0。
下面是一个简单的代码示例,展示如何使用`cv2.threshold`函数进行五种不同的二值化处理:
```python
import cv2
import numpy as np
# 读取图像
image = cv2.imread('path_to_image.jpg', 0) # 确保使用灰度模式读取图像
# 设置阈值和最大值
thresh = 127
maxval = 255
# 应用五种不同的二值化方式
ret, binary = cv2.threshold(image, thresh, maxval, cv2.THRESH_BINARY)
ret, binary_inv = cv2.threshold(image, thresh, maxval, cv2.THRESH_BINARY_INV)
ret, trunc = cv2.threshold(image, thresh, maxval, cv2.THRESH_TRUNC)
ret, tozero = cv2.threshold(image, thresh, maxval, cv2.THRESH_TOZERO)
ret, tozero_inv = cv2.threshold(image, thresh, maxval, cv2.THRESH_TOZERO_INV)
# 显示结果
cv2.imshow('Binary', binary)
cv2.imshow('Binary Inverted', binary_inv)
cv2.imshow('Truncated', trunc)
cv2.imshow('To Zero', tozero)
cv2.imshow('To Zero Inverted', tozero_inv)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,`path_to_image.jpg`应替换为你想要进行二值化处理的图像路径。通过读取的图像和定义的阈值以及最大值,使用`cv2.threshold`函数对图像进行五种不同的二值化处理,并使用`cv2.imshow`函数显示结果。
阅读全文