2016-11-15 2 views
0

Я запускал программу трекбара из документации OpenCV. Вот код:Создание cv2.createTrackbar заданного размера шага и отбрасывание определенных значений

import cv2 
import numpy as np 

def nothing(x): 
    pass 

# Create a black image, a window 
img = np.zeros((300,512,3), np.uint8) 
cv2.namedWindow('image') 

# create trackbars for color change 
cv2.createTrackbar('R','image',5,255,nothing) 
cv2.createTrackbar('G','image',5,255,nothing) 
cv2.createTrackbar('B','image',5,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) 
    k = cv2.waitKey(1) & 0xFF 
    if k == 27: 
     break 

    # get current positions of four trackbars 
    r = cv2.getTrackbarPos('R','image') 
    **if r%4 == 0 and r >0 and r <255: 
     pass** 
    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() 

Я хочу, чтобы размер шага TrackBar быть 4, то есть как диапазон установлен на 0-255, я хочу значения, которые делятся на 4. Я скорректировал эту вещь в nothing обратного вызова, как это:

def nothing(x): 
    if x > 0 and x <255 and x % 4 ==0 
     pass 

Кроме того, я также добавил код (полужирный один), но это тоже не работает Anyone с раствором?

ответ

1

Хотя нет никаких аргументов в OpenCV, чтобы указать размер шага, вы можете изменить свой алгоритм, чтобы включить те же:

В настоящее время у вас есть TrackBar, которые могут перейти от 1-255. Вы читаете его положение так, как есть, но вас интересуют только значения {4,8,12,16 ...}

Вы можете уменьшить диапазон ваших трекбаров с [1-255] до [1-63], а int(255/4)=63

Затем, когда вы получите позицию TrackBar, вы можете умножить на 4, таким образом, ваш диапазон TrackBar будет выглядеть следующим образом:

{1,2,3,4 ... 63} х 4 = {4,8,12,16 ... 252}

Вы можете сделать это в коде, как показано ниже:

cv2.createTrackbar('R','image',1,63,nothing) 
#create trackbar with reduced range 
... 

r = cv2.getTrackbarPos('R','image') 
r=4*r 
#read reduced range and scale it up 
+0

О, да, это разумное решение. Спасибо! – Maham

1

До этого:

img[:] = [b,g,r] 

в другое заявление, вы можете просто поставить условие:

if b%4==0 and g%4==0 and r%4==0: 

затем написать выше statement.Hope это помогает.

+0

Спасибо за ответ! – Maham

Смежные вопросы