一、环境安装
bash
运行
pip install opencv-python numpy
二、核心原理
- 颜色空间转换 :常用 BGR→HSV,HSV 更适合按颜色筛选
- 阈值处理:设定像素明暗区间,实现图像二值化、分割区域
三、1. 颜色筛选(HSV 颜色提取)
常用颜色 HSV 范围
- 蓝色:
(90,43,46) ~ (124,255,255) - 绿色:
(35,43,46) ~ (77,255,255) - 红色:
(0,43,46) ~ (10,255,255) - 黄色:
(26,43,46) ~ (34,255,255)
完整代码
python
运行
import cv2
import numpy as np
img = cv2.imread("test.jpg")
# 转HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 设定蓝色阈值
lower_blue = np.array([90,43,46])
upper_blue = np.array([124,255,255])
# 颜色掩码
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 提取目标颜色
res = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow("原图",img)
cv2.imshow("掩码",mask)
cv2.imshow("颜色提取",res)
cv2.waitKey(0)
cv2.destroyAllWindows()
四、2. 图像阈值处理(二值化)
四种常用阈值模式
- 二进制阈值:大于阈值变白,小于变黑
- 反二进制阈值:相反效果
- 截断阈值:超出阈值统一设为阈值
- 自适应阈值:局部明暗自动适配,暗光图片首选
基础全局阈值代码
python
运行
import cv2
img = cv2.imread("test.jpg",0) # 直接读灰度图
# ret:阈值 , binary:处理后图像
ret, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
cv2.imshow("灰度图",img)
cv2.imshow("二值化",binary)
cv2.waitKey(0)
参数说明:
127:分界阈值255:最大值THRESH_BINARY:二值化模式
自适应阈值(实用最强)
python
运行
adap = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
cv2.imshow("自适应阈值",adap)
五、常用实操用途
- 提取画面指定颜色物体
- 证件文字黑白二值化
- 去除图像杂色、背景分离
- 摄像头实时颜色追踪
- 工业视觉物料颜色分拣
六、精简要点
- 选颜色优先转HSV,比 RGB 精准
- 纯色分离用
inRange做掩码 - 文字、轮廓提取用二值化阈值
- 光线不均一律用自适应阈值