自适应二值化python代码实现 不调用opencv
时间: 2023-10-01 12:08:33 浏览: 101
自适应二值化代码
自适应二值化是指根据图像的局部特征来确定阈值的二值化方法。以下是一个简单的 Python 实现:
```python
import numpy as np
def adaptive_threshold(img, block_size, constant):
# 块的大小必须为奇数
if block_size % 2 == 0:
block_size += 1
# 图像的大小
h, w = img.shape
# 初始化二值化后的图像
binary_img = np.zeros((h, w), np.uint8)
# 遍历图像的每个像素
for y in range(h):
for x in range(w):
# 计算像素所在块的左上角和右下角坐标
x1 = max(x - block_size // 2, 0)
y1 = max(y - block_size // 2, 0)
x2 = min(x + block_size // 2, w - 1)
y2 = min(y + block_size // 2, h - 1)
# 计算块内的平均灰度值
block = img[y1:y2+1, x1:x2+1]
mean = np.mean(block)
# 根据块内的平均灰度值计算阈值
threshold = mean - constant
# 根据阈值将像素二值化
if img[y, x] > threshold:
binary_img[y, x] = 255
else:
binary_img[y, x] = 0
return binary_img
```
使用示例:
```python
import cv2
img = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
binary_img = adaptive_threshold(img, block_size=41, constant=15)
cv2.imshow('binary', binary_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`block_size` 参数表示块的大小,`constant` 参数表示阈值偏移量。
阅读全文