2016-11-18 12 views
1

私はcv2.createTrackbarについてのドキュメントを読んでいます。それは言ったcv2.createTrackbarコールバックにuserdataパラメータを渡します

onChange – Pointer to the function to be called every time the slider changes position. This function should be prototyped as void Foo(int,void*); , where the first parameter is the trackbar position and the second parameter is the user data (see the next parameter). If the callback is the NULL pointer, no callbacks are called, but only value is updated.

私はuserDataを渡す方法を知らないPythonのonChangeコールバック。

私は私のコールバック関数を定義します。それだけで、コールバックにバー値パラメータを渡すので

callback() takes exactly 2 arguments (1 given) 

def callback(value,cur_img): 
    cv2.GaussianBlur(cur_img, (5, 5), value) 

私はエラーを得ました。
しかし、私は本当にcv2.GaussianBlur関数のcur_imgが必要です。 cur_img引数をコールバックに渡すにはどうすればよいですか?

+0

入力時に(コールバックが呼び出される前に)cur_imgを宣言してコールバック内でグローバル変数として取得できないのですか? –

答えて

1

ラムダ式をコールバック関数として使用して関数クロージャを作成できます。私はクラス内のプレーヤーをラップするときに同じ問題を抱えていて、クラスインスタンスのプロパティを使用したかったのです。下のクラスメソッドのスニペット。

def play(self): 
    ... other code... 
    cv2.namedWindow('main', cv2.WINDOW_NORMAL) 
    cv2.createTrackbar('trackbar', 'main', 0, 
     100, 
     lambda x: self.callback(x, self) 
     ) 
    ... other code... 

def callback(tb_pos, self): 
    #tb_pos receives the trackbar position value 
    #self receives my class instance, but could be 
    #whatever you want 
関連する問題