カラーパレットとしてのトラックバー

目的

デモ

ここでは,トラックバーの位置によって指定した色を表示する簡単なプログラムを作成する.ウィンドウには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時にだけ色を表示するスイッチを作成している.

In [1]:
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)

課題

トラックバーを使って,色とブラシのサイズ(半径)を調整可能なペイント・アプリケーションを作成せよ.描画機能についてはマウス処理についての解説(前項)を参照すること.

目次

  • 最初に戻る
  • 一つ上: OpenCVのGUI機能
    画像と動画の表示方法と保存方法,およびGUIの機能であるマウスとトラックバーの作り方を学ぶ
  • 前の学習項目 カラーパレットとしてのトラックバー trackbar.ipynb
    パラメータ調整のためのトラックバーの作り方を学ぶ.
  • 次の学習項目
    基本の処理: 画像に対する基本の処理を学ぶ: 画素値の編集,幾何変換,コードの最適化(code optimization),数学関数など
    画像の基本処理 basicImageproc.ipynb
    画素値の読み取り方,変更方法,画像の特定領域(ROI)の使い方と基本処理を学ぶ.