Opencv识别图片颜色并绘制轮廓

实验原理

在计算机视觉中,颜色识别是一项基础而重要的任务。通过颜色识别,我们可以从图像中提取出特定颜色的区域,进而对这些区域进行分析、处理或标记。本实验利用OpenCV库,通过转换颜色空间、设定颜色范围、滤波、形态学变换以及寻找轮廓等步骤,实现了对图像中特定颜色(本例为黄色)的识别,并在识别到的区域上绘制轮廓。

  1. 颜色空间转换:首先,将图像从BGR颜色空间转换到HSV颜色空间。HSV颜色空间更符合人类对颜色的感知,且更容易进行颜色范围的划分。

  2. 颜色范围设定与筛选 :在HSV颜色空间中,设定要识别的颜色的HSV范围,并利用cv2.inRange函数筛选出该颜色范围内的像素。

  3. 滤波与形态学变换:为了去除噪声和不必要的细节,对筛选出的颜色区域进行中值滤波。接着,进行形态学开运算(先腐蚀后膨胀),以进一步去除小物体、分离物体、平滑较大物体的边界。

  4. 寻找轮廓 :利用cv2.findContours函数在滤波和形态学变换后的图像中寻找轮廓。

  5. 轮廓绘制:遍历所有找到的轮廓,根据轮廓的面积筛选出符合条件的轮廓,并在原图像的副本上绘制这些轮廓。

实验代码
python 复制代码
import cv2
import numpy as np

# 1、输入图片
img = cv2.imread("./color_1.png")
img = cv2.resize(img, (0, 0), fx=0.7, fy=0.7)

# 2、转换HSV颜色空间
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 3、设定要识别的颜色范围,并利用inRange找到该范围
yellow_min = np.array([26, 43, 46])
yellow_max = np.array([34, 255, 255])
img_color = cv2.inRange(img_hsv, yellow_min, yellow_max)

# 4、进行滤波
img_blur = cv2.medianBlur(img_color, 7)

# 5、形态学变换------开运算 先腐蚀再膨胀
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
img_erode = cv2.erode(img_blur, kernel)
img_open = cv2.dilate(img_erode, kernel)

# 6、寻找轮廓
contours, _ = cv2.findContours(img_open, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 7、遍历所有轮廓并绘制符合条件的轮廓
img_copy = img.copy()
for i in contours:
    if cv2.contourArea(i) < 200 or cv2.contourArea(i) > 200000:
        continue
    cv2.drawContours(img_copy, [i], 0, (0, 0, 255), 2)

# 8、输出图片
cv2.imshow('Original Image', img)
cv2.imshow('Contours on Image', img_copy)
cv2.waitKey(0)
cv2.destroyAllWindows()

实验现象

运行上述代码后,将出现两个窗口。一个窗口显示原始图像,另一个窗口显示在原始图像副本上绘制的黄色区域的轮廓。轮廓以红色线条表示,线条宽度为2个像素。通过调整颜色范围、滤波参数和轮廓筛选条件,可以对不同颜色和形状的物体进行识别与轮廓绘制。

相关推荐
灵动的艺术11 小时前
如一 Agent 架构解读(二十四):Agent 高效率低成本思考
人工智能·agent·如一
Xxtaoaooo12 小时前
双11避坑:我用 WorkBuddy + TextIn xParse 做了个「避坑对比台」,商品详情图丢进去,参数矛盾自动现形
人工智能·1024程序员节·textin·workbuddy·ai数据层基础设施
昵称画12 小时前
交接班记录电子化:三班之间的信息不漏
开发语言·数据库·人工智能·低代码·php
Navicat中国13 小时前
将 Navicat 的 AI 助手连接到本地 LLM
人工智能·chatgpt
“AI国潮设计-小江”13 小时前
【AIGC实战】Python+SDXL批量生成“潮汕英歌舞不倒翁”IP | 角色一致性与多场景融合方案,附完整代码
开发语言·人工智能·python·prompt·aigc
点PY13 小时前
WeDetect论文精读
人工智能
CCC:CarCrazeCurator13 小时前
稀疏奖励 vs 稠密奖励:强化学习中的反馈带宽权衡
人工智能·深度学习·机器人
骑着蜗牛撵大象32713 小时前
语音变分录、规则挡幻觉:拆解开源 AI 记账系统 Smart Ledger 的全栈设计
人工智能·ai·架构·js·数据校验
墨染天姬13 小时前
[AI]Cursor Subagent 机制详解
人工智能
数睿数据无代码开发13 小时前
企业AI落地从高价值场景开始|数睿数据《AI应用场景集》正式发布
人工智能