2016-11-15 17 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() 

私はトラックバーのステップサイズは4になりたい、範囲は0〜255に設定されているようすなわち、私は4で割り切れるされている値をしたい私はこの事を調整しています。ここ コードですこのようなnothingコールバック:また

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

は、私はまた、コード(太字1)を追加したが、これはまた、溶液で 誰もが動作していませんか?

答えて

1

ステップサイズを指定するためのOpenCVには引数はありませんが、あなたが同じことを組み込むために、あなたのアルゴリズムを変更することができます。

現在、あなたは1〜255から移動することができますトラックバーを持っています。あなたはその位置をそのまま読んでいますが、値{4,8,12,16 ...}だけに興味があります

トラックバーの範囲を[1-255]からあなたはトラックバーの位置を受信したときに、[1-63]、int(255/4)=63

としてその後、あなたは、このようにあなたのトラックバーの範囲は、次のようになります、4を掛けすることができます

{1,2,3,4 ... 63} 4、X =示したように、コードでこれを行うことができる

{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

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

が、それは助け上記statement.Hopeを書く:あなたは、単に条件を置くことができelse文で

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

+0

答えをありがとう! – Maham

関連する問題