OpenCV实验篇:识别图片颜色并绘制轮廓

第三篇:识别图片颜色并绘制轮廓

1. 实验原理

颜色识别的原理:

  • 颜色在图像处理中通常使用 HSV 空间来表示。

    • HSV 空间是基于人类视觉系统的一种颜色模型,其中:

      • H(Hue):色调,表示颜色的种类,例如红色、绿色。

      • S(Saturation):饱和度,表示颜色的纯度。

      • V(Value):明度,表示颜色的亮度。

    • 使用 HSV 空间分割颜色比直接使用 RGB 空间更加直观且效果更好。

轮廓绘制的原理:

  • 轮廓是指图像中具有相同颜色或灰度值的边界。

  • 在 OpenCV 中,通过以下步骤实现轮廓绘制:

    1. 转换图像到 HSV 空间,设定颜色阈值,分割出感兴趣区域。

    2. 使用 cv2.findContours 查找轮廓。

    3. 使用 cv2.drawContours 将轮廓绘制在原图或复制图像上。

2. 实验代码

以下是基于 OpenCV 的完整代码:

复制代码
import cv2
import numpy as np

# --------------------1. 读取图像--------------------
# 加载目标图片
image = cv2.imread("./color_1.png")
# 调整图片大小,方便显示和处理
image = cv2.resize(image, (0, 0), fx=0.5, fy=0.5)

# --------------------2. 转换到 HSV 空间--------------------
# 将图像从 BGR 空间转换到 HSV 空间
image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# --------------------3. 定义颜色阈值范围--------------------
# 定义要识别的颜色范围(以蓝色为例)
# 这里的值需要根据实际颜色进行调整
lower_blue = np.array([100, 150, 50])  # HSV 下界
upper_blue = np.array([140, 255, 255])  # HSV 上界

# 使用 inRange 函数分割颜色区域
mask = cv2.inRange(image_hsv, lower_blue, upper_blue)

# --------------------4. 图像处理--------------------
# 使用形态学操作去除噪点(可选)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
mask_cleaned = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

# --------------------5. 查找轮廓--------------------
# 在掩码图像中查找轮廓
contours, hierarchy = cv2.findContours(mask_cleaned, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# --------------------6. 绘制轮廓--------------------
# 创建一个原始图像的副本,用于绘制轮廓
image_contours = image.copy()
# 在副本上绘制轮廓
cv2.drawContours(image_contours, contours, -1, (0, 255, 0), 3)

# --------------------7. 显示结果--------------------
# 显示原始图像
cv2.imshow("Original Image", image)
# 显示掩码图像
cv2.imshow("Mask", mask_cleaned)
# 显示绘制了轮廓的图像
cv2.imshow("Contours", image_contours)

# 等待按键退出
cv2.waitKey(0)
cv2.destroyAllWindows()
3. 实验现象

实验效果:

  1. 原始图像窗口:显示原始图像。

  2. 掩码窗口:显示分割后的蓝色区域(白色部分为识别的颜色)。

  3. 轮廓绘制窗口:显示绘制了颜色轮廓的图像。

实验总结:

  1. 使用 HSV 空间可以高效地分割颜色区域。

  2. cv2.findContourscv2.drawContours 可以精确提取和标记物体的边界。

  3. 这种方法可以应用在以下场景:

    • 交通标志识别。

    • 物体检测与跟踪。

    • 色彩分类任务。

相关推荐
wei_shuo44 分钟前
DeepSeek-R1 模型现已在亚马逊云科技上推出
人工智能·amazon
枉费红笺1 小时前
目标检测竞赛训练策略解析与拓展
人工智能·目标检测·计算机视觉
小白的高手之路1 小时前
常用的卷积神经网络及Pytorch示例实现
人工智能·pytorch·python·深度学习·神经网络·cnn
IT古董1 小时前
【漫话机器学习系列】173.模型可识别度(Model Identifiability)
人工智能·机器学习
Julian.zhou1 小时前
MCP服务:五分钟实现微服务治理革命,无缝整合Nacos/Zookeeper/OpenResty
人工智能·微服务·zookeeper·交互·openresty
weixin_409411021 小时前
支持 MCP 协议的开源 AI Agent 项目
人工智能·microsoft
jndingxin1 小时前
OpenCV 图形API(6)将一个矩阵(或图像)与一个标量值相加的函数addC()
人工智能·opencv
神经星星1 小时前
在线教程丨YOLO系列重要创新!清华团队发布YOLOE,直击开放场景物体实时检测与分割
人工智能·深度学习·机器学习
李帅14969824191671 小时前
🌟《从一到二:基于Trae的多智能体合作Prompt自动生成迭代指南》
人工智能
全栈开发圈2 小时前
新书速览|深入理解DSP:基于TMS320F28379D的开发与实践
人工智能·信号处理·dsp开发