温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • 如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

发布时间:2021-10-18 09:23:25 阅读:175 作者:柒染 栏目:开发技术
亿速云空间服务器,独享5M带宽,BGP线路,安全稳定,不到0.96元/天! 查看详情>>

今天就跟大家聊聊有关如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

    一、基础理论

    HSV:HSV是一种为了加快调色效率,且易于理解的概念。

    Hue:色相(具体的颜色)

    Saturation:饱和度、色彩纯净度

    Value:明度

    1、Hue(色相)

    Hue:色相(具体的颜色)

    如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

    2、Value(明度)

    明度:色彩的明亮程度,单通道亮度(并不等同于整体发光量)。

    (明度越高越白,越低越黑,一般提高明度会同时提高R、G、B三通道的数值)

    3、Saturation(饱和度)

    Saturation:饱和度、色彩纯度。(越低越灰,越高越纯)

    (一般调高饱和度会降低RGB中相对较低的数值,凸显主要颜色的纯度。 )

    如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

    B站视频讲解:

    短动画慢语速1分钟讲清影视调色中色彩形成原理基础——RGB与HSV

    二、hsv三通道及单通道效果

    如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

    如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

    如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

    三、*args && **kwargs

    *args:传入参数未知,且不需要知道参数名称。

    如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

    **args:传入参数未知,但需要知道参数名称。

    如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

    四、滚动条控制h、s、v(min && max)

    1、创建滚动条

    API

    CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname,
                                  intvalueint count,
                                  TrackbarCallback onChange = 0,
                                  void* userdata = 0);

    形式参数一trackbarname:滑动空间的名称;

    形式参数二winname:滑动空间用于依附的图像窗口的名称;

    形式参数三value:初始化阈值;

    形式参数四count:滑动控件的刻度范围;

    形式参数五TrackbarCallback:是回调函数,其定义如下

    typedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata);
    # 3、创建h、s、v滚动条
        cv2.createTrackbar('hmin''h', 12, 179, Renew)
        cv2.createTrackbar('hmax''h', 37, 179, Renew)
        cv2.createTrackbar('smin''s', 12, 179, Renew)
        cv2.createTrackbar('smax''s', 37, 179, Renew)
        cv2.createTrackbar('vmin''v', 12, 179, Renew)
        cv2.createTrackbar('vmax''v', 37, 179, Renew)

    如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

    2、回调函数 -- 阈值设置

    API

    inRange()

    主要是将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0),该功能类似于之间所讲的双阈值化操作。

    void inRange(InputArray src, InputArray lowerb,
                                  InputArray upperb, OutputArray dst);

    参数1:输入要处理的图像,可以为单通道或多通道。

    参数2:包含下边界的数组或标量。

    参数3:包含上边界数组或标量。

    参数4:输出图像,与输入图像src 尺寸相同且为CV_8U 类型。

    (注:dst输出二值化之后的图像)

    # 1、获取滑动条反馈值
        hmin = cv2.getTrackbarPos('hmin''h')
        hmax = cv2.getTrackbarPos('hmax''h')
        smin = cv2.getTrackbarPos('smin''s')
        smax = cv2.getTrackbarPos('smax''s')
        vmin = cv2.getTrackbarPos('vmin''v')
        vmax = cv2.getTrackbarPos('vmax''v')
     
        # 2、设置阈值(inRange:在阈值(min,max)之内,设置为白色;在阈值之外,设置为黑色)
        h_thresh = cv2.inRange(np.array(h), np.array(hmin), np.array(hmax))
        s_thresh = cv2.inRange(np.array(s), np.array(smin), np.array(smax))
        v_thresh = cv2.inRange(np.array(v), np.array(vmin), np.array(vmax))

    如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

    3、回调函数 -- 感兴趣值

    API

    bitwise_and()

    图像的与运算主要用于获取某个图像中感兴趣的部分,是针对两个图像矩阵数组或一个数组与标量的按位与。

    # 3、获取感兴趣二值(与运算)
        interest = cv2.bitwise_and(h_thresh, cv2.bitwise_and(s_thresh, v_thresh))

    如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题

    总代码

    # HSV颜色空间与滑动条(*args && **args)
    import cv2
    import numpy as np
    # 回调函数
    # *args:传入参数未知,且不需要知道参数名称
    # **args:传入参数未知,但需要知道参数名称
    def HSV_CallBack(*args):
        # 1、获取滑动条反馈值
        hmin = cv2.getTrackbarPos('hmin''h_binary')
        hmax = cv2.getTrackbarPos('hmax''h_binary')
        smin = cv2.getTrackbarPos('smin''s_binary')
        smax = cv2.getTrackbarPos('smax''s_binary')
        vmin = cv2.getTrackbarPos('vmin''v_binary')
        vmax = cv2.getTrackbarPos('vmax''v_binary')
        # 2、设置阈值(inRange:在阈值(min,max)之内,设置为白色;在阈值之外,设置为黑色)
        h_binary = cv2.inRange(np.array(h), np.array(hmin), np.array(hmax))
        s_binary = cv2.inRange(np.array(s), np.array(smin), np.array(smax))
        v_binary = cv2.inRange(np.array(v), np.array(vmin), np.array(vmax)) 
        # 3、获取感兴趣二值(与运算)
        binary = cv2.bitwise_and(h_binary, cv2.bitwise_and(s_binary, v_binary)) 
        # 4、显示
        cv2.imshow('h_binary', h_binary)
        cv2.imshow('s_binary', s_binary)
        cv2.imshow('v_binary', v_binary)
        cv2.imshow('binary', binary) 
    def Show_HSV():
        global hsv, h, s, v
        # 0、创建窗口
        cv2.namedWindow('h_binary')
        cv2.namedWindow('s_binary')
        cv2.namedWindow('v_binary')
        # 1、获取hsv图片
        hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
        cv2.imshow('hsv', hsv)
        # 2、获取h、s、v三通道图片
        h, s, v = cv2.split(hsv)
        # 3、创建h、s、v滚动条
        cv2.createTrackbar('hmin''h_binary'12179, HSV_CallBack)
        cv2.createTrackbar('hmax''h_binary'37179, HSV_CallBack)
        cv2.createTrackbar('smin''s_binary'12179, HSV_CallBack)
        cv2.createTrackbar('smax''s_binary'37179, HSV_CallBack)
        cv2.createTrackbar('vmin''v_binary'12179, HSV_CallBack)
        cv2.createTrackbar('vmax''v_binary'37179, HSV_CallBack)
        HSV_CallBack()
    if __name__ == '__main__':
        global img
        img = cv2.imread('Resource/test.jpg')
        cv2.imshow('img', img)
        # 显示h、s、v
        Show_HSV() 
        cv2.waitKey(0)

    看完上述内容,你们对如何理解OpenCV基础HSV颜色空间*args与**kwargs滑动条传参问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

    亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI

    开发者交流群×