Opencv 学习笔记:局部区域二值化实操
·
在图像处理中,有时无需对整张图像二值化,仅针对感兴趣区域(ROI)做局部二值化即可满足需求。本文通过极简代码,演示 OpenCV 实现图像局部区域二值化的核心方法,新手可直接复用。
核心代码实现
import cv2 as cv
# 1. 以灰度模式读取图像(参数0)
src = cv.imread("./image/4.bmp", 0)
if src is None:
print('could not load image')
exit()
# 2. 调整原始图像窗口大小并显示
cv.namedWindow('src', cv.WINDOW_NORMAL)
cv.resizeWindow("src", 400, 600)
cv.imshow("src", src)
# 3. 选取ROI区域(行:700-1000,列:500-2000)
face = src[700:1000, 500:2000]
# 4. 对ROI区域做固定阈值二值化
ret, binary = cv.threshold(face, 110, 255, cv.THRESH_BINARY)
# 5. 将二值化后的ROI替换回原图
src[700:1000, 500:2000] = binary
# 6. 调整结果窗口大小并显示
cv.namedWindow('outimage', cv.WINDOW_NORMAL)
cv.resizeWindow('outimage', 400, 600)
cv.imshow('outimage', src)
# 7. 等待按键释放资源
cv.waitKey(0)
cv.destroyAllWindows()
关键知识点解析
- 灰度读取优化:
cv.imread参数设为 0,直接读取灰度图,省去cvtColor转灰度步骤,简化代码; - ROI 选取规则:
src[y1:y2, x1:x2],需注意行(y)在前、列(x)在后,且坐标需在图像尺寸范围内; - 窗口自适应:
WINDOW_NORMAL+resizeWindow解决高分辨率图像显示不全问题,适配不同屏幕; - 局部替换逻辑:将二值化后的 ROI 区域重新赋值给原图对应位置,实现 “局部处理、整体保留”。
调优与扩展技巧
- 阈值调整:110 为自定义阈值,可根据图像明暗调整(值越高,局部黑色区域越多);
- 二值化模式:替换
cv.THRESH_BINARY为cv.THRESH_BINARY_INV可实现局部黑白反转; - ROI 适配:修改
700:1000, 500:2000为目标区域坐标,即可适配不同场景的局部处理。
更多推荐
所有评论(0)