【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

相关推荐
cwtlw2 分钟前
java学习记录05
java·开发语言·学习
聪明的墨菲特i7 分钟前
django博客项目实现站内搜索功能
数据库·后端·python·django
ᝰꫝꪉꪯꫀ36110 分钟前
Java基础——多线程
java·开发语言·后端
前网易架构师-高司机12 分钟前
YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11 推理的 C++ 和 Python 实现
c++·python·yolo
《源码好优多》15 分钟前
基于java的宠物用品交易平台
java·开发语言
小灰灰爱代码19 分钟前
Python——鸡兔同笼问题
开发语言·python·算法
阡之尘埃23 分钟前
Python自动化小技巧24——实现自动化输出模板表格报告
开发语言·python·数据分析·自动化·excel·pandas
无所事事的海绵宝宝1 小时前
selenium元素定位校验以及遇到的元素操作问题记录
python·功能测试·selenium·测试工具
Joemt1 小时前
基于opencv制作GUI界面
opencv·计算机视觉
计算机学姐1 小时前
基于Python爬虫大屏可视化的热门旅游景点数据分析系统
开发语言·vue.js·后端·爬虫·python·mysql·django