【python】OpenCV—Color Detection

学习来自 如何使用 OpenCV Python 检测颜色

py 复制代码
import cv2
import numpy as np


def red_hsv(img, save=False):
    lower_hsv1 = np.array([0, 175, 20])
    higher_hsv1 = np.array([10, 255, 255])

    lower_hsv2 = np.array([170, 175, 20])
    higer_hsv2 = np.array([10, 255, 255])

    mask1 = cv2.inRange(img, lower_hsv1, higher_hsv1)
    mask2 = cv2.inRange(img, lower_hsv2, higer_hsv2)

    if save:
        cv2.imwrite("red-mask-1.jpg", mask1)
        cv2.imwrite("red-mask-2.jpg", mask2)
        cv2.imwrite("red-mask.jpg", mask1+mask2)

    return mask1 + mask2


def green_hsv(img, save=False):
    lower_hsv1 = np.array([40, 150, 20])
    higher_hsv1 = np.array([70, 255, 255])

    mask1 = cv2.inRange(img, lower_hsv1, higher_hsv1)
    if save:
        cv2.imwrite("green-mask-1.jpg", mask1)

    return mask1


if __name__ == "__main__":
    bgr = cv2.imread("1.png")
    hsv = cv2.cvtColor(bgr, cv2.COLOR_BGR2HSV)
    cv2.imwrite("hsv.jpg", hsv)

    mask = red_hsv(hsv, save=True) + green_hsv(hsv, save=True)
    cv2.imwrite("mask.jpg", mask)

    result = cv2.bitwise_and(bgr, bgr, mask=mask)
    cv2.imshow("color detection", result)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

转成 hsv 色域,来过滤掉相应的颜色

H 根据 x 轴取值,S 根据 y 轴取值,V 始终在 (20-255) 之间的范围内取值

bitwise_and,输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0

看看结果

输入图片

hsv

red-mask-1

red-mask-2

red-mask

green-mask-1

result

相关推荐
2301_809204701 小时前
bootstrap怎么实现鼠标悬停切换图片预览功能
jvm·数据库·python
坚果派·白晓明5 小时前
【鸿蒙PC三方库移植适配框架解读系列】第八篇:扩展lycium框架使其满足rust三方库适配
c语言·开发语言·华为·rust·harmonyos·鸿蒙
小徐学编程-zZ5 小时前
量产测试数据
python·压力测试·数据库架构
花间相见5 小时前
【PaddleOCR教程01】PP-OCRv5 全面指南:从模型架构到实战部署
开发语言·r语言
QQ8057806515 小时前
django基于机器学习的电商评论情感分析系统设计实现
python·机器学习·django
wx09095 小时前
stata实现机器学习的环境配置
python·机器学习·stata
小短腿的代码世界5 小时前
Qt 股票订单撮合引擎:高频交易系统的核心心脏
开发语言·数据库·qt·系统架构·交互
nuowenyadelunwen7 小时前
CS 61A Lab 2 笔记:短路求值、高阶函数与 Lambda 表达式
python·函数式编程·cs61a·berkeley
谙弆悕博士7 小时前
快速学C语言——第16章:预处理
c语言·开发语言·chrome·笔记·创业创新·预处理·业界资讯
yuan199977 小时前
基于 C# 实现的 Omron HostLink (FINS) 协议 PLC 通讯
开发语言·c#