Inicio rápido de OpenCV cuatro: control TrackBar (control deslizante)

1: función API

1: crear barra de seguimiento

int createTrackbar(
					const String &trackbarname,    #轨迹条的名字
					const String &winname,         #窗口名字。窗口得存在才能创建滑动条
					int* value,                    #滑块的初始值
					int count,                     #滑块的最大值(最小位置的值始终为0)
					TrackbarCallback onChange=0,   #回调函数
					void* userdata=0               #用户传给回调函数的数据
);

2:establecerTrackbarPos

setTrackbarPos	(
				 const String &trackbarname,   	  #需要设置trackbar的名称,与创建的名称相对应
				 const String &winname,       	  #trackbar所在窗体的名称
				 int pos                      	  #该trackbar的值
);	

Dos: demostración de código

1: paleta 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)#为0则只显示一帧
    if(key&0xff==ord('q')):
        break

cv2.destroyAllWindows()

Si cree que la marca roja en el terminal no se ve bien, puede cambiar la función de devolución de llamada a: def mcallback(evento):

producción
inserte la descripción de la imagen aquí

2: extracción de área de color específica

import cv2
import numpy as np


def mcallback(x):
    pass


cv2.namedWindow("Tracking")
#绿色的HSV:可能不是很准
#l_g = np.array([35, 43, 46]) # 下限
#u_g = np.array([77,255,255]) # 上限
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])  # lower green value
    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)  # src1,src2

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

cv2.destroyAllWindows()

producción
segmentación de color

¿Por qué los canales separados son negros, blancos y grises en lugar de rojos, verdes y azules?
La razón es que es un solo canal después de la separación, lo que equivale a llenar los otros dos canales con el mismo valor mientras se separa el canal. Por ejemplo, el canal rojo, cuando se separa el canal rojo, el verde y el azul se rellenan con el mismo valor que el rojo, por lo que solo hay negro, blanco y gris.
Entonces, ¿dónde está el verde? Puede observar y encontrará que cuanto más cerca está el color del verde en la imagen original, más cerca está del blanco en el canal verde.
Donde hay verde puro habrá blanco puro en el canal verde.
El valor G es 255 -> BGR (255, 255, 255), que es blanco puro

Haré las notas de estudio de hsv para todos cuando tenga tiempo. Recientemente, aprendí cinco en la pasantía OpenCV: conversión del espacio de color . 2022/8/2 15:51

"Gran pastel" diario:
que todos sigan su propio reloj y tomen decisiones sin arrepentimiento

Supongo que te gusta

Origin blog.csdn.net/weixin_52051554/article/details/126018160
Recomendado
Clasificación