Last updated on 2020年11月3日
トラックバーで便利だよね〜
便利だよね〜
こんにちは、エピックです。
今回は、OpenCVで利用可能なGUIについてです。
OpenCVは、画像処理を行うライブラリであり、裏側での処理しかできないと思っていませんか。
そんなことはありません、OpenCVに標準でユーザインタラクティブに連携可能なGUIが備わっています。
そのなかから、最も利用頻度の高いトラックバーについて紹介します。
OpenCVのGUI機能 -トラックバー
OpenCVで利用可能なGUIの一つにトラックバーがあります。
トラックバーとは、つまみ (スライダー) と目盛りの2つの部分からなるコントロールGUIです。
イメージが付かないという方のために画像を貼っておきます。
トラックバーを利用することで、画像処理の際に渡すパラメータ(例えば、閾値)を実際の画像の変化を見ながら決めることができます。
そのため、いちいちコード上で修正→確認を繰り返す必要がなく、効率的な作業が可能となります。
また、画面上で変化をかくにんできるため、率直に楽しいです。
トラックバーを作成する
実際にベースとなるコードを書いてみます。
トラックバーを作成する際に利用する関数ですが、cv2.createTrackbar() および cv2.getTrackbarPos() を利用します。
前者がトラックバー自体の生成、後者がユーザからのインプット取得に利用します。
まず、cv2.createTrackbar() ですが次の引数を設定します。
第一引数 | トラックバーの名前 |
第二引数 | トラックバーを付与するウィンドウ名 |
第三引数 | トラックバーの初期値 ※あくまで初期値であり下限ではない |
第四引数 | トラックバーの最大値 |
第五引数 | コールバック(呼び出し)関数名 |
気をつけていただきたいのは、トラックバーはウィンドウではないため、第二引数にあるように事前にウィンドウを生成しておく必要があります。
これには、cv2.namedWindow() を利用します。
つづいて、cv2.getTrackbarPos() がこちらは2つの引数があり、設定項目は次のとおりです。
非常に簡易的な設定のみでに値を取得できてしまいます。
第一引数 | 対象とするトラックバーの名前 |
第二引数 | トラックバーを付与しているウィンドウ名 |
では、2値化(cv2.threshold)とあわせて確認をしてみます。
import cv2
import numpy as np
def printing(position):
print(position)
# 画像を読み込み
# cv2.imread() を利用しグレースケールで読み込む
img = cv2.imread("color.png", 0)
# トラックバーを表示するウィンドウを作成
cv2.namedWindow("window")
# 初期値を設定
threshold = 150
# トラックバーを作成する
# トラックバーの名前、トラックバーをつけるウィンドウ名、初期値、トラックバーの最大値。コールバック関数
cv2.createTrackbar("track", "window", threshold, 255, printing)
while True:
# cv2.THRESH_BINARY にて2値化する
ret, th = cv2.threshold(img, threshold, 255, cv2.THRESH_BINARY)
# トラックバーの位置をthreshholdに代入
threshold = cv2.getTrackbarPos("track", "window")
# 画像を表示する
# 引数はWindow名に合わせる
cv2.imshow('window', th)
if cv2.waitKey(10) == 27:
break
cv2.destroyAllWindows()
どうでしょうか?
下にトラックバーがついた画像が表示されたのではないでしょうか。
このように、別のライブラリを利用することなく、非常に簡単にインタラクティブなUIを作成できる点もOpenCVの強みと言えます。
今回は、2値化での紹介でしたが、もちろんRGB等別パラーメータの変更の際も利用することができます。
こちらについても引き続き扱っていければと思います。
今回も最後までお読みいただきありがとうございました。
では。
参考
カラーパレットとしてのトラックバー(OpenCV-Python Tutorials)
今回扱った内容が記載されたOpenCV-Python Tutorialsのページです。
英語を機械的に日本語に翻訳した感じで多少読みづらいかもしれませんが情報はまとまっています
チュートリアルであり情報が不足している部分もあるため、他の有志の方々のサイトを参考にしてみてください。
とはいえ、最初に読む分には程よい分量であるためおすすめです。
Pythonで始めるOpenCV入門
Pythonでの実装をベースにまとめられた貴重なOpenCVの入門書です。
内容についても、環境のセットアップから画像処理の基本(変換、平滑化、抽出 等)過不足なく一通りの操作が解説されており個人的にすごく勉強になりました。
Kindle Unlimitedで読むことができるのですが購入し、今回も参考にさせていただいてます。
もし、PythonでOpenCVのまとまったドキュメントを探している方は手にとっても損にはならないかと思います。