如何使用OpenCV进行颜色与阈值处理?

一、环境安装

bash

运行

复制代码
pip install opencv-python numpy

二、核心原理

  1. 颜色空间转换 :常用 BGR→HSV,HSV 更适合按颜色筛选
  2. 阈值处理:设定像素明暗区间,实现图像二值化、分割区域

三、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. 图像阈值处理(二值化)

四种常用阈值模式

  1. 二进制阈值:大于阈值变白,小于变黑
  2. 反二进制阈值:相反效果
  3. 截断阈值:超出阈值统一设为阈值
  4. 自适应阈值:局部明暗自动适配,暗光图片首选

基础全局阈值代码

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)

五、常用实操用途

  1. 提取画面指定颜色物体
  2. 证件文字黑白二值化
  3. 去除图像杂色、背景分离
  4. 摄像头实时颜色追踪
  5. 工业视觉物料颜色分拣

六、精简要点

  1. 选颜色优先转HSV,比 RGB 精准
  2. 纯色分离用inRange做掩码
  3. 文字、轮廓提取用二值化阈值
  4. 光线不均一律用自适应阈值
相关推荐
Shockang17 小时前
AI 设计工作流全景拆解:Figma MCP / Claude Design / Codex / Google Stitch
人工智能
To_OC18 小时前
数据集划分不是随便切:手把手切分大众点评情感数据集
人工智能·llm·agent
冬奇Lab19 小时前
每日一个开源项目(第142篇):android/skills - Google 官方 Android 开发 AI Skill 库
人工智能·开源·资讯
冬奇Lab19 小时前
Skill 系列(06):Skill 工程化与治理——路由准确率 38%、压缩节省 76%
人工智能·开源·agent
IT_陈寒21 小时前
Vue这个坑我跳了两次,原来问题出在这
前端·人工智能·后端
新新技术迷21 小时前
Node给AI接口做SSE代理与鉴权
人工智能
redreamSo1 天前
大模型是不是到顶了?瓶颈到底在哪
人工智能·openai
Oo9201 天前
Tool Use 背后的技术逻辑
人工智能
姗姗来迟了1 天前
Vue3封装AI流式对话组件踩坑实录
人工智能