备赛笔记:Opencv学习:颜色识别

这篇具有很好参考价值的文章主要介绍了备赛笔记:Opencv学习:颜色识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV颜色识别一般要以下步骤:
1 颜色空间转换,将BGR转换为HSV,用色调区分颜色
2 按照阈值滤出所识别的颜色
3 消除噪点,平滑边界
3 提取连续域,提取要识别的颜色

1 HSV
H:色调,用角度度量,范围0°到360°,从红色开始逆时针方向计算。红色为0°,红绿蓝间隔120°,互补色差180°。
S:饱和度,范围0到1,代表光谱色占颜色比例。0时颜色只有灰度,1时颜色为纯光谱色
V:明度,范围0到1,代表颜色明亮程度。0为黑色,1为白色
备赛笔记:Opencv学习:颜色识别
备赛笔记:Opencv学习:颜色识别

腐蚀(erosion)和膨胀(dilation)
腐蚀和膨胀作用:
1 消除噪声
2 分割独立图像元素
3 寻找极大值或极小值区域
膨胀:
将图像和任意寻找内涵进行卷积,提取覆盖区域的最大像素值。这一操作会使亮区扩展
腐蚀:
和膨胀正好相反,提取覆盖区域最下像素值1,这一操作让亮区变细,暗区变大

提取连通域:
两种像素邻接关系会构成连通域:4邻接(上下左右),和8邻接(包括对角线)
备赛笔记:Opencv学习:颜色识别
opencv里寻找连通域函数findContours()

·语法格式:
image,contours,hierarchy = cv2.findContours(image,mode,method)
式中返回值为:
·image: 与函数参数中的原始图像image一致。
·contours: 返回的轮廓。
·hierarchy: 图像的拓扑信息(轮廓层次)。
式中参数为:
·mode: 轮廓检索模式。
·method: 轮廓的近似方法。
参数mode:

cv2.RETR_EXTERNAL 只检测外轮廓

cv2.RETR_LIST检测的轮廓不建立等级关系

cv2.RETR_CCOMP建立两个等级的轮廓

cv2.RETR_TREE建立一个等级树结构的轮廓

参数method:

cv2.CHAIN_APPROX_NONE存储所有的轮廓点

cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息

(具体算法实现可以去了解union-find算法)

颜色识别程序实现

import cv2
import numpy as np

cap = cv2.VideoCapture(0)
red_min = np.array([0, 128, 46])
red_max = np.array([5, 255, 255])
red2_min = np.array([156, 128, 46])
red2_max = np.array([180, 255, 255])
yellow_min = np.array([15, 128, 46])
yellow_max = np.array([50, 255, 255])

while True:
    ret,frame = cap.read()
    x,y = frame.shape[0:2]
    small_frame = cv2.resize(frame, (int(y / 2), int(x / 2)))
    cv2.imshow('small', small_frame)
    
    src = small_frame.copy()
    res = src.copy()
    hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
    mask_red1 = cv2.inRange(hsv, red_min, red_max)
    mask_red2 = cv2.inRange(hsv, red2_min, red2_max)
    mask_yellow = cv2.inRange(hsv, yellow_min, yellow_max)
    mask = cv2.bitwise_or(mask_red1, mask_red2)
    mask = cv2.bitwise_or(mask, mask_yellow)
    res = cv2.bitwise_and(src, src, mask=mask)
    h, w = res.shape[:2]
    blured = cv2.blur(res, (5, 5))
    ret, bright = cv2.threshold(blured, 10, 255, cv2.THRESH_BINARY)
    gray = cv2.cvtColor(bright, cv2.COLOR_BGR2GRAY)
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
    opened = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
    closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)
    contours, hierarchy = cv2.findContours(closed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    cv2.drawContours(src, contours, -1, (255, 0, 0), 2)
    cv2.imsow("result", src)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

1 red_min = np.array([0, 128, 46])
red_max = np.array([5, 255, 255])
red2_min = np.array([156, 128, 46])
red2_max = np.array([180, 255, 255])
yellow_min = np.array([15, 128, 46])
yellow_max = np.array([50, 255, 255])
我们要识别两种红色和一种黄色。这里列出它们的阈值上下限作为图像二值化的取值范围

2 hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
把图像转化为hsv类型

3 mask_red1 = cv2.inRange(hsv, red_min, red_max)
mask_red2 = cv2.inRange(hsv, red2_min, red2_max)
mask_yellow = cv2.inRange(hsv, yellow_min, yellow_max)
mask = cv2.bitwise_or(mask_red1, mask_red2)
mask = cv2.bitwise_or(mask, mask_yellow)
res = cv2.bitwise_and(src, src, mask=mask)
图像二值化,提取满足阈值范围的像素
cv2.inRange(图像,阈值下限,阈值上限):将阈值范围内像素设为255,阈值之外像素设为0
cv2.bitwise_or(图像1,图像2):图像或运算实现叠加
cv2.bitwise_and(图像1,图像2):图像与运算实现叠加

4 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
opened = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)
提取连续开闭区间用于降噪:

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
设置卷积核,第一个参数代表卷积核形状,有MORPH_RECT(矩形),MORPH_ELLIPSE(椭圆),MORPH_CROSS(十字形),第二个参数代表卷积核行和列

cv2.morphologyEx(要处理图像,处理方式,卷积核)
opened = cv2.morphologyEx(gray, cv2.MORPH_CLOSE, kernel)
开运算,先腐蚀后膨胀,可以消除小黑点,平滑边界。

closed = cv2.morphologyEx(opened, cv2.MORPH_CLOSE, kernel)
闭运算,先膨胀后腐蚀,可以消除小黑洞

5 contours, hierarchy = cv2.findContours(closed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(src, contours, -1, (255, 0, 0), 2)
提取连续域,得到区间文章来源地址https://www.toymoban.com/news/detail-446089.html

到了这里,关于备赛笔记:Opencv学习:颜色识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机设计大赛 深度学习YOLOv5车辆颜色识别检测 - python opencv

    🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com

    2024年02月19日
    浏览(93)
  • OpenCV颜色识别(所有颜色均可识别)

    欢迎访问我的博客sakuraの绘梨衣 本文中的颜色识别为红色,颜色阈值设置如下: 识别其他颜色可以参考HSV颜色阈值设置进行更改 下面是识别代码,注释很详细: 下面是识别效果:

    2024年02月12日
    浏览(39)
  • 【Opencv小项目 1】Opencv实现简单颜色识别

    Opencv简单颜色识别 Youtube教学视频 BGR HSV颜色模型 一、 BGR 和 HSV 颜色模型 BGR Model BGR模型表示三种颜色通道:红、绿、蓝,采用BGR模型的图像的颜色就是由红绿蓝三种颜色加权和混合而成。 此类模型的缺点显而易见,就是很难去表达一种颜色。比如你修改了如下BGR中的B值,间

    2024年02月09日
    浏览(47)
  • opencv颜色识别

      opencv中的颜色识别模块能够对图像中的颜色进行识别,并且在识别结果中能够显示出具体的颜色。目前 opencv中有以下几种颜色识别方法: 1、直方图均衡化 1、直方图均衡化 直方图均衡化是指将图像的灰度数据转换为一个灰度级排列,并通过计算对数变换,将原图像的灰度

    2024年02月03日
    浏览(40)
  • opencv——颜色识别

    这段时间一直在弄有关机器视觉识别的问题,在比赛中用到了很多关于颜色识别的视觉算法,感觉在开始工作之前还是需要先复习一下颜色识别的相关知识,帮助自己扩展一下优化算法的思维。 一个关于HSV相关应用的文章 顾名思义,就是使用摄像头实时识别出画面对应的颜

    2024年02月09日
    浏览(33)
  • Qt-OpenCV学习笔记--人脸识别

    本人从事机械设计12年,业余时间自学编程。 2022年4月6日,开始学习C#, 2022年9月7日,开始学习c++和Qt, 2022年10月28日,开始学习OpenCV, 今天终于搞定了传说中的 人脸识别  ,在此,做个记录。 人脸检测,是基于Haar特征的cascade分类器, 人脸识别,是基于LDA理论的Fisherface算

    2024年02月09日
    浏览(41)
  • 用opencv识别颜色并输出坐标

    pip install opencv-python 参考https://blog.csdn.net/qq_42114833/article/details/128648458?spm=1001.2014.3001.5502 利用相机,并不保存照片

    2024年02月16日
    浏览(38)
  • 简易机器学习笔记(十一)opencv 简易使用-人脸识别、分类任务

    前段时间摸了下机器学习,然后我发现其实openCV还是一个很浩瀚的库的,现在也正在写一篇有关yolo的博客,不过感觉理论偏多,所以在学yolo之前先摸一下opencv,简单先写个项目感受感受opencv。 openCV实际上已经有一个比较完整的模型了,下载在haarcascades 这里我们下haarcascade

    2024年01月21日
    浏览(49)
  • Python-OpenCV实现简单的颜色识别(对红色和蓝色识别并输出)

    摄像头识别红色和蓝色并框选,当该颜色为摄像头屏幕上大多数颜色时打印出该颜色的名称 新手学习笔记,第一次写博客,若有错误还请指出( ~`_` )~ 2.初始设置  3.图像处理,提取颜色 4.轮廓绘制  5.颜色识别  下面是OpenCV中HSV空间颜色对照表 6.程序主体 下面是程序运行

    2024年02月11日
    浏览(59)
  • 【EPS32S3学习笔记】ESP32+OPENCV+人脸识别 本地部署

    提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 从https://github.com/joachimBurket/esp32-

    2024年02月09日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包