OpenCV利用HSV颜色区间分离不同物体

2023-12-24 11:04

本文主要是介绍OpenCV利用HSV颜色区间分离不同物体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求

当前有个需求是从一个场景中将三个不同的颜色的二维码分离出来,如下图所示。
示例图像
这里有两个思路可以使用

  • 思路一是通过深度学习的方式,训练一个能够识别旋转边界框的模型,但是需要大量的数据进行模型训练,此处缺少训练数据,不太方便执行。
  • 思路二则是直接通过颜色进行分离,找到颜色的区间,通过去骗判断的方式分别分离出三个不同颜色对应的轮廓。

方案

首先,先要找到图像的HSV颜色对应表格,如下所示。
在这里插入图片描述
然后按照读取图像->转化为HSV通道图像->颜色分离的思路编写代码即可,详细的代码如下。

# -*- coding: utf-8 -*-
# @Time    : 2023/5/31 22:59
# @Author  : 肆十二
# @Email   : 3048534499@qq.com
# @File    : demo
# @Software: PyCharmimport numpy as np
import cv2
import os# 参考:https://blog.csdn.net/chenghaoy/article/details/86509950
def get_red(image_path):# 设定颜色HSV范围,假定为红色redLower_1 = np.array([0, 43, 46])redUpper_1 = np.array([10, 255, 255])redLower_2 = np.array([156, 43, 46])redUpper_2 = np.array([180, 255, 255])# 读取图像img = cv2.imread(image_path)# 将图像转化为HSV格式hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 去除颜色范围外的其余颜色mask_1 = cv2.inRange(hsv, redLower_1, redUpper_1)mask_2 = cv2.inRange(hsv, redLower_2, redUpper_2)mask = mask_1 + mask_2# mask = cv2.merge([mask_1, mask_2])# mask = cv2.# 二值化操作ret, binary = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY_INV)cv2.imwrite("results/red.jpg", binary)def get_yellow(image_path):# 设定颜色HSV范围,假定为红色redLower = np.array([26, 43, 46])redUpper = np.array([34, 255, 255])# 读取图像img = cv2.imread(image_path)# 将图像转化为HSV格式hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 去除颜色范围外的其余颜色mask = cv2.inRange(hsv, redLower, redUpper)# 二值化操作ret, binary = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY_INV)cv2.imwrite("results/yellow.jpg", binary)def get_green(image_path):# 设定颜色HSV范围,假定为红色redLower = np.array([35, 43, 46])redUpper = np.array([77, 255, 255])# 读取图像img = cv2.imread(image_path)# img = cv2.medianBlur(img, 5)# 将图像转化为HSV格式hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# hsv =# 去除颜色范围外的其余颜色mask = cv2.inRange(hsv, redLower, redUpper)# 二值化操作ret, binary = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY_INV)# img[img==0] =cv2.imwrite("results/green.jpg", binary)if __name__ == '__main__':image_path = "a.jpg"get_red(image_path)get_yellow(image_path)get_green(image_path)

OK在主函数中传入上图,之后在result文件夹下就能生成分离之后的结果,如下所示。

  • 绿色二维码分离结果
    在这里插入图片描述

  • 红色二维码分离结果
    在这里插入图片描述

  • 黄色二维码分离结果
    在这里插入图片描述

总结

很多时候,不需要过于依赖AI,通过传统的图像检测算法也能达到良好的效果,比如今天就通过HSV颜色通道的形式来进行分离,这在工业场景中是非常实用的。

这篇关于OpenCV利用HSV颜色区间分离不同物体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/531564

相关文章

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间