2018年7月20日金曜日

cvui を Python で試す

OpenCVでGUIを描画する場合、highguiの機能だと難しいケースがある。
特に画像いじる際に、パラメータを変更しながらリアルタイムに確認したい場合など、trackBarだけだと結構厳しい。
やっぱり、ボタンとか、チェックボックスとかのGUIツールも欲しい。でもQtやWFPだと気軽には試せなくなってしまう。

そんな不満を解消するcvuiはC++の"header only"のOpenCVのUIを描画する軽量ライブラリで、ヘッダーファイルをインクルードすれば気軽に使えてしまうので重宝していた。

そんなcvuiがBETA releaseでPythonに対応していたので試してみる。

注意
Githubにも記載がる通り、あくまでBETA releaseです。
不具合や今後何があるかわかりません。

https://github.com/Dovyski/cvui/releases/tag/v2.7.0-BETA
NOTICE: this is a BETA release, a particularly special one. From now on, cvui has two implementations: a C++ and a Python one. The C++ implementation only received bug fixes since its last release, so there should be no problems regarding upgrades. The Python implementation, however, is brand new. Its API is unlikely to change until the final 2.7.0 release, but please bare in mind it might present problems and things could change to improve the overall Python experience of cvui.

インストール

Fedora 28, OpenCV3.4.1, Python 3.6.5 の環境にインストール
pipでpython版のcvuiをインストールする
$ sudo pip3 install cvui

簡単なサンプルを動かしてみる

テキストとボタンを描画する簡単なサンプル。
リファレンスのドキュメントはC++だが、PythonもほぼおなじようなIFで使用できる。
(Python用のドキュメントは見つからなかった)

テキストとボタンを表示する簡単なサンプルを作ってみる
WINDOW_NAME = "CVUI Sample"
import numpy as np
import cv2
import cvui

WINDOW_NAME = "CVUI Sample" # cvuiの初期化時に指定するWindow Name

def main():
    frame = np.zeros((200, 500, 3), np.uint8)
    is_on = False

    # cvuiの初期化
    cvui.init(WINDOW_NAME)

    while True:
        frame[:] = (49, 52, 49)

        # テキストの描画
        cvui.text(frame, 110, 80, "Hello, world!")
        # ボタンの描画と押下したときの判定
        if cvui.button(frame, 100, 40, "Button"):
            is_on = not(is_on)

        # ボタンが押されたら、テキストを描画する(トグルボタン)
        if is_on:
            cvui.text(frame, 150, 150, "Button Clicked")

        # 画像を描画する(cv2.imshowとおなじ)
        cvui.imshow(WINDOW_NAME, frame)

        if cv2.waitKey(20) == 27:
            break;

if __name__ == '__main__':
    main()

スクリーンショット

ボタンを押すと、トグルでテキストを表示・非表示する。




0 件のコメント:

コメントを投稿