ここでは,トラックバーの位置によって指定した色を表示する簡単なプログラムを作成する.ウィンドウには3個のトラックバーが表示されており,トラックバーはそれぞれ青,緑,赤色の数値の指定に使われる.そしてトラックバーの位置に応じてウィンドウに表示される色が変わる.なおデフォルトの色は黒に設定されている.
cv2.getTrackbarPos(trackbarname, winname)
関数により、指定されたウィンドゥwinnameにおけるトラックバーtrackbarNameの現在の位置を得る。
トラックバーを作るにはcv2.createTrackbar(trackbarName, windowName, value, count, onChange)
関数を用いる。この第1引数trackbarNameはトラックバーの名前,第2引数windowNameは第1引数で指定したトラックバーが表示されるウィンドウの名前,第3引数valueはトラックバーのデフォルト値,第4引数countはトラックバーの取りうる最大値,第5引数onChangeはトラックバーの位置が変わる度に呼び出されるコールバック関数である.このコールバック関数は常にトラックバーの現在位置をデフォルトの引数として受け取る.ただここでのコールバック関数は何の処理もしないので、この引数を役立ててはいない.
トラックバーのもう一つの重要な使い方に,ボタンや切り替え機能としての使い方がある.OpenCVは、デフォルトではボタンを実装するような関数を用意していないので、トラックバーをボタンや切り替えスイッチとして使うことができる.このアプリケーションでは,スイッチがOFF時にはウィンドウを真っ暗にし,ON時にだけ色を表示するスイッチを作成している.
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',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,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')
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()
# Notebookの場合はこれが必要
for _ in range(5):
cv2.waitKey(1)
トラックバーを使って,色とブラシのサイズ(半径)を調整可能なペイント・アプリケーションを作成せよ.描画機能についてはマウス処理についての解説(前項)を参照すること.