zoukankan      html  css  js  c++  java
  • 【python-opencv】转换颜色空间

    1、改变颜色空间

    OpenCV中有超过150种颜色空间转换方法。但是我们将研究只有两个最广泛使用的,BGR↔灰色和BGR↔HSV。

    对于颜色转换,我们使用cv函数。cvtColor(input_image, flag),其中flag决定转换的类型。

    对于BGR→灰度转换,我们使用标志cv.COLOR_BGR2GRAY。类似地,对于BGR→HSV,我们使用标志cv.COLOR_BGR2HSV。要获取其他标记,只需在Python终端中运行以下命令:

    flags=[i for i in dir(cv) if i.startswith('COLOR_')]

    部分结果:

    ['COLOR_BAYER_BG2BGR',
     'COLOR_BAYER_BG2BGRA',
     'COLOR_BAYER_BG2BGR_EA',
     'COLOR_BAYER_BG2BGR_VNG',
     'COLOR_BAYER_BG2GRAY',
     'COLOR_BAYER_BG2RGB',
     'COLOR_BAYER_BG2RGBA',
     'COLOR_BAYER_BG2RGB_EA',
     'COLOR_BAYER_BG2RGB_VNG',
     'COLOR_BAYER_GB2BGR',
    。。。

    2、对象跟踪

    现在我们知道了如何将BGR图像转换成HSV,我们可以使用它来提取一个有颜色的对象。在HSV中比在BGR颜色空间中更容易表示颜色。在我们的应用程序中,我们将尝试提取一个蓝色的对象。方法如下: - 取视频的每一帧 - 转换从BGR到HSV颜色空间 - 我们对HSV图像设置蓝色范围的阈值 - 现在单独提取蓝色对象,我们可以对图像做任何我们想做的事情。

    import cv2 as cv
    import numpy as np
    cap = cv.VideoCapture(0)
    while(1):
        # 读取帧
        _, frame = cap.read()
        # 转换颜色空间 BGR 到 HSV
        hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
        # 定义HSV中蓝色的范围
        lower_blue = np.array([110,50,50])
        upper_blue = np.array([130,255,255])
        # 设置HSV的阈值使得只取蓝色
        mask = cv.inRange(hsv, lower_blue, upper_blue)
        # 将掩膜和图像逐像素相加
        res = cv.bitwise_and(frame,frame, mask= mask)
        cv.imshow('frame',frame)
        cv.imshow('mask',mask)
        cv.imshow('res',res)
        k = cv.waitKey(5) & 0xFF
        if k == 27:
            break
    cv.destroyAllWindows()

    下图显示了对蓝色对象的跟踪:

    注意 图像中有一些噪点。我们将在后面的章节中看到如何删除它们。 这是对象跟踪中最简单的方法。一旦学习了轮廓的功能,你就可以做很多事情,例如找到该对象的质心并使用它来跟踪对象,仅通过将手移到相机前面以及其他许多有趣的东西就可以绘制图表。

    如何找到跟踪的HSV值?

    这是在stackoverflow.com上发现的一个常见问题。它非常简单,你可以使用相同的函数cv.cvtColor()。你只需传递你想要的BGR值,而不是传递图像。例如,要查找绿色的HSV值,请在Python终端中尝试以下命令:

    >>> green = np.uint8([[[0,255,0 ]]])
    >>> hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV)
    >>> print( hsv_green )
    [[[ 60 255 255]]]

    现在把[H- 10,100,100][H+ 10,255, 255]分别作为下界和上界。除了这个方法之外,你可以使用任何图像编辑工具(如GIMP或任何在线转换器)来查找这些值,但是不要忘记调整HSV范围。

    参考:

    http://woshicver.com/FifthSection/4_1_%E6%94%B9%E5%8F%98%E9%A2%9C%E8%89%B2%E7%A9%BA%E9%97%B4/

  • 相关阅读:
    GOF23设计模式之适配器模式(Adapter)
    浅谈浅克隆(shallow clone)和 深克隆(deep clone)
    GOF23设计模式之原型模式(prototype)
    GOF23设计模式之建造者模式(builder)
    GOF23设计模式之工厂模式(factory)
    GOF23设计模式之单例模式(singleton)
    面向对象设计的六大基本原则
    day38 各种队列、Event事件、协程、猴子补丁
    day37 GIL、同步、异步、进程池、线程池、回调函数
    day36 joinablequeue、多线程理论、多线程的两种使用方式、守护线程、互斥锁、死锁、递归锁、信号量
  • 原文地址:https://www.cnblogs.com/xiximayou/p/13124889.html
Copyright © 2011-2022 走看看