OpenCV快速入门四:TrackBar控件(滑动条)

一:函数API

1:createTrackbar

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

2:setTrackbarPos

setTrackbarPos  (
                 const String &trackbarname,
                 const String &winname,
                 int pos
);

二:代码演示

1:BGR调色盘

import cv2
import numpy as np

def mcallback(event,x,y,flags,userdata):
    pass

cv2.namedWindow('trackbar', cv2.WINDOW_AUTOSIZE)
cv2.resizeWindow('trackbar', 640, 480)

cv2.createTrackbar('R',"trackbar",0,255,mcallback)
cv2.createTrackbar('G',"trackbar",0,255,mcallback)
cv2.createTrackbar('B',"trackbar",0,255,mcallback)

img=np.zeros((480,640,3),np.uint8)
while True:

    r=cv2.getTrackbarPos('R','trackbar')
    b=cv2.getTrackbarPos('B','trackbar')
    g=cv2.getTrackbarPos('G','trackbar')

    img[:]=[b,g,r]
    cv2.imshow('trackbar',img)
    key=cv2.waitKey(10)
    if(key&0xff==ord('q')):
        break

cv2.destroyAllWindows()

如果觉得终端有标红不好看,可以将回调函数改成: def mcallback(event):

输出

OpenCV快速入门四:TrackBar控件(滑动条)

2:特定颜色区域提取

import cv2
import numpy as np

def mcallback(x):
    pass

cv2.namedWindow("Tracking")

cv2.createTrackbar("LH", "Tracking", 35, 255, mcallback)
cv2.createTrackbar("LS", "Tracking", 43, 255, mcallback)
cv2.createTrackbar("LV", "Tracking", 46, 255, mcallback)
cv2.createTrackbar("UH", "Tracking", 77, 255, mcallback)
cv2.createTrackbar("US", "Tracking", 255, 255, mcallback)
cv2.createTrackbar("UV", "Tracking", 255, 255, mcallback)

while True:
    img = cv2.imread(r"C:\Users\DMr\Pictures\text\book.jpg")
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    l_h = cv2.getTrackbarPos("LH", "Tracking")
    l_s = cv2.getTrackbarPos("LS", "Tracking")
    l_v = cv2.getTrackbarPos("LV", "Tracking")

    u_h = cv2.getTrackbarPos("UH", "Tracking")
    u_s = cv2.getTrackbarPos("US", "Tracking")
    u_v = cv2.getTrackbarPos("UV", "Tracking")

    l_g = np.array([l_h, l_s, l_v])
    u_g = np.array([u_h, u_s, u_v])

    mask = cv2.inRange(hsv, l_g, u_g)

    res = cv2.bitwise_and(img, img, mask=mask)

    cv2.imshow("img", img)
    cv2.imshow("mask", mask)
    cv2.imshow("res", res)
    key = cv2.waitKey(10)
    if(key & 0xff == ord('q')):
        break

cv2.destroyAllWindows()

输出

OpenCV快速入门四:TrackBar控件(滑动条)

为什么分离出的通道都是黑白灰,而不是红绿蓝?
原因是分离后为单通道,相当于分离通道的同时把其他两个通道填充了相同的数值。比如红色通道,分离出红色通道的同时,绿色和蓝色被填充为和红色相同的数值,这样一来就只有黑白灰了。
那么绿色体现在哪呢?可以进行观察,会发现原图中颜色越接近绿色的地方在绿色通道越接近白色。
在纯绿的地方在绿色通道会出现纯白。
G值为255 ->BGR(255,255,255),为纯白

抽空会把hsv的学习笔记会给大家补上,最近在实习
OpenCV学习五:色彩空间转换
补上了2022/8/2 15:51

每日”大饼”:
愿每个人都能遵循自己的时钟 做不后悔的选择

Original: https://blog.csdn.net/weixin_52051554/article/details/126018160
Author: 氿 柒
Title: OpenCV快速入门四:TrackBar控件(滑动条)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/702387/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球