opencv 阈值化示例
时间: 2023-08-02 11:06:59 浏览: 90
好的,以下是一个简单的 OpenCV 阈值化示例代码:
```python
import cv2
# 加载图像
img = cv2.imread('image.jpg', 0)
# 阈值化处理
ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Thresholded Image', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先使用 `cv2.imread()` 函数加载一张灰度图像。然后,我们使用 `cv2.threshold()` 函数进行阈值化处理。该函数接受四个参数:输入图像、阈值、最大值和阈值类型。在这个示例中,阈值为 127,最大值为 255,阈值类型为 `cv2.THRESH_BINARY`,表示将图像中像素值大于阈值的像素设置为最大值,小于等于阈值的像素设置为 0。最后,我们使用 `cv2.imshow()` 函数显示原始图像和阈值化后的图像,并使用 `cv2.waitKey()` 函数等待用户按下任意键,最后使用 `cv2.destroyAllWindows()` 函数销毁所有窗口。
希望能对你有所帮助!
相关问题
opencv 阈值分割
非常感谢您的提问。关于Opencv阈值分割的问题,我可以给您提供一些基本概念和方法:
阈值分割是数字图像处理中的一种基本处理方法,用于将图像转换为二值图像。其基本原理是根据像素点的灰度值与设定阈值之间的大小关系来确定该像素点在二值图像中的取值。常见的阈值分割方法包括OTSU阈值法、最大熵阈值法、谷底阈值法等。
具体实现可以使用Opencv提供的函数,例如threshold函数。该函数可以接收输入图像、输出图像、设定阈值等参数,并输出二值图像。示例代码如下:
```
import cv2
img = cv2.imread("image.jpg", 0) # 读入灰度图像
ret, thres = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY) # 阈值设为128,超过阈值的像素设为255
cv2.imshow("Threshold Image", thres)
cv2.waitKey(0)
```
希望我的回答能够对您有所帮助。如果您有其他问题,请随时提出。
python opencv阈值
### 图像阈值处理概述
图像阈值处理是一种常见的图像分割方法,通过设定一个或多个阈值将灰度图像转换为二值图像。这种方法可以有效地简化数据并保留感兴趣的对象轮廓[^1]。
### 使用 `cv2.threshold` 函数进行固定阈值处理
对于固定的全局阈值处理,在 OpenCV 中可以通过调用 `cv2.threshold()` 来完成。此函数接收原始图像以及指定的阈值参数作为输入,并返回两个值:计算后的实际阈值和经过阈值化处理的新图像矩阵。
#### 代码示例:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 加载图片并转为灰度图
img = cv2.imread('image.jpg',0)
# 应用简单阈值处理
ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret,thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
titles = ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in range(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
```
这段脚本展示了不同类型的固定阈值模式,包括二值化、反向二值化等效果[^3]。
### 自适应阈值处理
当场景中的光照条件变化较大时,采用局部自适应阈值算法会更加有效。OpenCV 提供了 `cv2.adaptiveThreshold()` 方法来进行此类操作,它能够自动调整每个像素点处的最佳阈值。
#### 实现方式如下:
```python
# 创建一副空白画布用于展示结果
adaptive_thresh_images = []
# Otsu's 二值化法 (适用于单模态直方图分布较好的情况)
ret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# Gaussian 模糊 + Otsu’s 二值化组合
blur = cv2.GaussianBlur(img,(5,5),0)
ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
adaptive_thresh_images.extend([th2, th3])
methods = ["Otsu's Thresholding", "Gaussian_blurred + Otsu's Thresholding"]
for method, img in zip(methods, adaptive_thresh_images):
plt.figure(figsize=(8, 6))
plt.imshow(img,'gray'), plt.title(method)
plt.axis('off')
plt.tight_layout(), plt.show()
```
上述例子中还包含了两种特殊的技术——Otsu 的最佳全局阈值选取策略及其与高斯滤波相结合的方式。
阅读全文