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

 更新时间:2021年10月17日 12:00  点击:1946

一、基础理论

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

Hue:色相(具体的颜色)

Saturation:饱和度、色彩纯净度

Value:明度

1、Hue(色相)

Hue:色相(具体的颜色)

2、Value(明度)

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

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

3、Saturation(饱和度)

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

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

B站视频讲解:

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

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

三、*args && **kwargs

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

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

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

1、创建滚动条

API

CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname,
                              int* value, int 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)

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))

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

API

bitwise_and()

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

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

总代码

# 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', 12, 179, HSV_CallBack)
    cv2.createTrackbar('hmax', 'h_binary', 37, 179, HSV_CallBack)
    cv2.createTrackbar('smin', 's_binary', 12, 179, HSV_CallBack)
    cv2.createTrackbar('smax', 's_binary', 37, 179, HSV_CallBack)
    cv2.createTrackbar('vmin', 'v_binary', 12, 179, HSV_CallBack)
    cv2.createTrackbar('vmax', 'v_binary', 37, 179, 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)

参考资料

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

​​​Python编程中*args与**kwargs区别作用详解

createTrackbar使用方法及步骤

以上就是OpenCV基础HSV颜色空间*args与**args滑动条传参问题的详细内容,更多关于HSV颜色空间*args与**args滑动条传参的资料请关注猪先飞其它相关文章!

[!--infotagslink--]

相关文章

  • python opencv 画外接矩形框的完整代码

    这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
  • python opencv通过4坐标剪裁图片

    图片剪裁是常用的方法,那么如何通过4坐标剪裁图片,本文就详细的来介绍一下,感兴趣的小伙伴们可以参考一下...2021-06-04
  • OpenCV如何去除图片中的阴影的实现

    这篇文章主要介绍了OpenCV如何去除图片中的阴影的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-29
  • 解决使用OpenCV中的imread()内存报错问题

    这篇文章主要介绍了解决使用OpenCV中的imread()内存报错问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • python OpenCV学习笔记

    这篇文章主要介绍了python OpenCV的相关资料,帮助大家更好的理解和学习使用python的opencv,感兴趣的朋友可以了解下...2021-03-31
  • 使用OpenCV去除面积较小的连通域

    这篇文章主要介绍了使用OpenCV去除面积较小的连通域,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-05
  • 详解pycharm的python包opencv(cv2)无代码提示问题的解决

    这篇文章主要介绍了详解pycharm的python包opencv(cv2)无代码提示问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-29
  • 在C#中使用OpenCV(使用OpenCVSharp)的实现

    这篇文章主要介绍了在C#中使用OpenCV(使用OpenCVSharp)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-15
  • C++ opencv实现车道线识别

    这篇文章主要为大家详细介绍了C++ opencv实现车道线识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-20
  • 详解opencv中画圆circle函数和椭圆ellipse函数

    这篇文章主要介绍了opencv中画圆circle函数和椭圆ellipse函数,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-05-09
  • Opencv LBPH人脸识别算法详解

    这篇文章主要为大家详细介绍了Opencv LBPH人脸识别算法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
  • python中的opencv和PIL(pillow)转化操作

    这篇文章主要介绍了python中的opencv和PIL(pillow)转化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • python基于opencv检测程序运行效率

    这篇文章主要介绍了python基于opencv检测程序运行效率,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-09
  • 浅谈OpenCV中的新函数connectedComponentsWithStats用法

    这篇文章主要介绍了浅谈OpenCV中的新函数connectedComponentsWithStats用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-05
  • Opencv实现绿幕视频背景替换功能

    这篇文章主要为大家详细介绍了Opencv实现绿幕视频背景替换功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
  • OpenCV-Python实现凸包的获取

    凸包是一个计算几何中的概念,在图像处理过程中,我们常常需要寻找图像中包围某个物体的凸包,本文就使用OpenCV实现,感兴趣的可以了解一下...2021-06-08
  • python基于OpenCV模板匹配识别图片中的数字

    这篇文章主要介绍了python基于OpenCV模板匹配识别图片中的数字,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-03-31
  • python-OpenCV 实现将数组转换成灰度图和彩图

    今天小编就为大家分享一篇python-OpenCV 实现将数组转换成灰度图和彩图,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • 使用opencv识别图像红色区域,并输出红色区域中心点坐标

    这篇文章主要介绍了使用opencv识别图像红色区域,并输出红色区域中心点坐标,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-03
  • Python编程OpenCV和Numpy图像处理库实现图片去水印

    这篇文章主要介绍了Python编程中如何实现图片去水印本文采用了OpenCV和Numpy的图像处理的方法来实现,文中附含详细示例代码,有需要的朋友可以借鉴参考下...2021-09-26