【Python+OpenCV入门学习】七、轨迹条操作

本篇文章,将学习如何进行轨迹条操作。主要学习函数getTrackbarPos()和createTrackbar()使用。

环境:Windows 7(64)   python 3.6    opencv 3.4.2

一、了解函数

轨迹条使用起来非常的方便,通过鼠标滑动轨迹条,可以实时看到效果,在调参时用处很大。

1.1 函数createTrackbar()

函数createTrackbar()的函数形式如下:

int createTrackbar( const String & trackbarname,const String & winname,int * value,int count,TrackbarCallback 	onChange = 0,void * userdata = 0 )

功能:在指定的窗口创建一个轨迹条。可将变量值与轨迹条关联,当轨迹条位置改变时就调用回调函数onChange。

参数:

trackbarname:为轨迹条起个名字。

winname:指定在什么窗口创建轨迹条。

value:指向整数变量的指针,该变量的值反映滑块的位置。

count:轨迹条可滑动的最大值。 最小值始终为0。

onChange:每次滑块更改位置时要调用的函数。 该函数原型为void Foo(int,void *); ,其中第一个参数是轨迹栏位置,第二个参数是用户数据(参见下一个参数)。 如果回调是NULL指针,则不会调用任何回调,但只更新值。默认为0。

userdata:按原样传递给回调的用户数据。 它可用于处理轨迹栏事件而无需使用全局变量。默认为0。

1.2 函数getTrackbarPos()

函数getTrackbarPos()的函数形式如下:

retval = cv.getTrackbarPos(trackbarname, winname)

功能:返回轨迹条当前位置

参数:

trackbarname:轨迹条的名称。

winname:轨迹条所在的窗口名称。

二、编程实现

用轨迹条实现调色板。代码如下:

import numpy as np
import cv2 as cv

#回调函数,什么都不做
def nothing(x):
    pass
img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')
#创建轨迹条
cv.createTrackbar('R(0~255)','image',0,255,nothing)
cv.createTrackbar('G(0~255)','image',0,255,nothing)
cv.createTrackbar('B(0~255)','image',0,255,nothing)
while(1):
    cv.imshow('image',img)
    k = cv.waitKey(1) & 0xFF
    if k == 27:
        break
    #获得当前轨迹条的值
    r = cv.getTrackbarPos('R(0~255)','image')
    g = cv.getTrackbarPos('G(0~255)','image')
    b = cv.getTrackbarPos('B(0~255)','image')
    img[:] = [b,g,r]
cv.destroyAllWindows()

程序运行结果图如下:

                                    

猜你喜欢

转载自blog.csdn.net/qq_18995069/article/details/83050060