【OpenCV-Python】教程:1-5 TrackerBar

【目标】

  • 学会将Trakbar绑定到OpenCV窗口
  • cv2.getTrackbarPos(), cv2.createTrackbar()

【代码】

在这里插入图片描述

import numpy as np
import cv2 

# 空函数
def nothing(x):
    pass

# 创建图像
img = np.zeros((300,512,3), np.uint8)
cv2.namedWindow('image')

# 为彩色图像创建trackbar
cv2.createTrackbar('R', 'image', 0, 255, nothing)
cv2.createTrackbar('G', 'image', 0, 255, nothing)
cv2.createTrackbar('B', 'image', 0, 255, nothing)

# create switch for ON/OFF functionality
switch = '0 : OFF \n1 : ON'
cv2.createTrackbar(switch, 'image', 0, 1, nothing)


while(1):
    cv2.imshow('image', img)  
    if cv2.waitKey(2) & 0xFF == 27:
        break
  
    # 获取当前位置值
    r = cv2.getTrackbarPos('R','image')
    g = cv2.getTrackbarPos('G','image')
    b = cv2.getTrackbarPos('B','image')
    s = cv2.getTrackbarPos(switch,'image')
  
    # 如果关闭,就是黑图像
    if s == 0:
        img[:] = 0
    else:
        img[:] = [b,g,r]

cv2.destroyAllWindows()

【接口】

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

// # 返回trackbar的位置
int cv::getTrackbarPos ( const String & 	trackbarname,
const String & 	winname 
);
cv2.createTrackbar(trackbarName, windowName, value, count, onChange) -> None

# 返回trackbar的位置
cv2.getTrackbarPos(trackbarname, winname) -> retval

参数

  • trackbarname: trackbar名字
  • winname: trackbar父窗口名字
  • value: 整型值,反映trackbar的位置,一旦创造,slider的位置被该值定义
  • count: slider的最大值,最小值总是为0
  • onChange: 是一个函数指针,当slider位置发生变化时被调用,函数原型必须是 void Foo(int, void*), 其中第一个参数为trackbar的位置,第二个参数为用户数据。如果是空函数,则什么都不做,只是改变值。
  • userdata: 用户数据可以传输到回调函数里,可以处理trackbar事件无需定义全局变量。

【小栗子】

做一个简单的画图程序,可以改变画笔的颜色和粗细。

在这里插入图片描述

SHOW ME THE CODE

import numpy as np
import cv2

# 创建图像
img = np.zeros((400, 800, 3), np.uint8)
cv2.namedWindow('image')

r, g, b = 0, 0, 0
c = 0
ix,iy = -1,-1
drawing = False
thickness = -1

# 鼠标的回调函数
def draw_circle(event, x, y, flags, param):
    global ix, iy, drawing, r, g, b, c, thickness
    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        ix, iy = x, y
    elif event == cv2.EVENT_MOUSEMOVE:
        if drawing == True:
            cv2.circle(param, (x, y), 5, (b, g, r), thickness)
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        cv2.circle(param, (x, y), 5, (b, g, r), thickness)


# 空函数
def nothing(x):
    pass

# 为彩色图像创建trackbar
cv2.createTrackbar('R', 'image', 0, 255, nothing)
cv2.createTrackbar('G', 'image', 0, 255, nothing)
cv2.createTrackbar('B', 'image', 0, 255, nothing)
cv2.createTrackbar('clear', 'image', 0, 1, nothing)
cv2.createTrackbar('thickness', 'image', 0, 30, nothing)

# 设置鼠标事件
cv2.setMouseCallback('image', draw_circle, img)

while (1):
    cv2.imshow('image', img)
    if cv2.waitKey(2) & 0xFF == 27:
        break

    # 获取当前位置值
    r = cv2.getTrackbarPos('R', 'image')
    g = cv2.getTrackbarPos('G', 'image')
    b = cv2.getTrackbarPos('B', 'image')
    c = cv2.getTrackbarPos('clear', 'image')
    thickness = cv2.getTrackbarPos('thickness', 'image')
  
    # 清空画布
    if c == 0:
        img[:] = 0


cv2.destroyAllWindows()

【参考】

  1. https://docs.opencv.org/4.5.5/d9/dc8/tutorial_py_trackbar.html
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄金旺铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值