Python での OpenCV の GUI 機能

Manav Narula 2023年10月10日
  1. Python で OpenCV を使用して画像を読み書きする
  2. Python で OpenCV を使用して画像を描画する
  3. Python で OpenCV を使用したトラックバー付きカラーパレット
  4. まとめ
Python での OpenCV の GUI 機能

GUI はグラフィカルユーザーインターフェイスの略で、ユーザーがキーボードやマウスなどのハードウェアデバイスを使用してプログラムを操作できるようにします。GUI は、比較的使いやすい視覚的に魅力的なインターフェイスを提供します。

opencv ライブラリは、画像を処理するためにさまざまな手法を適用できるさまざまな関数とオブジェクトを実装しています。このライブラリを使用すると、画像を非常に効率的に読み取って処理できます。

このチュートリアルでは、Python の opencv ライブラリを使用したさまざまな GUI テクニックを紹介します。

Python で OpenCV を使用して画像を読み書きする

GUI 技術の最も基本的なものは、画像の読み取りと表示に関連しています。opencv ライブラリは、imshow() 関数を使用して画像を表示するためのウィンドウを作成します。

imread() 関数を使用して事前に画像を読み取り、imwrite() メソッドを使用して指定されたパスに画像を保存することもできます。

Python インタープリターは、プログラムが実行されるとすぐに作成されたウィンドウを閉じようとします。これは、waitKey() 関数を使用して防ぐことができます。この関数は、ユーザーが何らかのキーを押してからプログラムの実行を再開するのを待ちます。

destroyAllWindows() 関数を使用して、ユーザーの要件に従ってウィンドウを閉じることができます。実例を見て​​みましょう。

コード例:

import cv2

img = cv2.imread("obj.png")
cv2.imshow("Show image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("Newimage.png", img)

出力:

True

Python で opencvGUI を使用して画像を読み書きします

このコードは、imread() 関数を使用して画像を読み取り、imshow() 関数を使用して画像を表示します。次に、ユーザーがキーを押すのを待ってから、実行を再開します。

キーを押すと、作成したウィンドウが閉じます。次に、imwrite() 関数は、指定された画像を指定されたパスに保存します。

関数内でファイル名とその形式も指定することに注意してください。この関数は、ファイルが正常に書き込まれたことを示す True を返します。

Python で OpenCV を使用して画像を描画する

opencv ライブラリは、画像に描画するための関数も提供します。line()rectangle()circle() などの関数を使用して、画像にさまざまな形を描くことができます。

前に読んだ画像にこれらの形を描くことができます。

コード例:

import cv2

img = cv2.imread("obj.png")

cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
cv2.rectangle(img, (400, 0), (510, 128), (255, 255, 0), 3)
cv2.imshow("Show image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("Newimage.png", img)

出力:

True

Python で OpenCV を使用して画像を描画する

上記の例では、入力画像に線と長方形を追加し、それをある場所に保存しました。

line() 関数は、画像に線を追加します。線の開始座標と終了座標を太さとカラーコードとともに指定します。

rectangle() 関数は長方形を作成します。この関数は、カラーコードと厚さとともに右下と左上の座標を指定します。

画像を描画した後、imwrite() 関数を使用して画像をデバイスにエクスポートします。

マウスを絵筆として使用して、特定の画像の好きな場所に形や線を追加することもできます。前に説明したように、opencv ライブラリには、waitKey() 関数のように、ユーザー入力を読み取って検出できる関数があります。

このライブラリには、左ボタンのマウスクリック、右ボタンのマウスクリックなどのさまざまなイベントが保存されます。ユーザーがいくつかのイベントを実行するのを待ってから、イベントに基づいて関数を呼び出すことができます。

まず、namedWindow() メソッドを使用してウィンドウを作成し、このウィンドウにタイトルを割り当てる必要があります。setMouseCallback() は、指定されたウィンドウでのマウスイベントを処理します。

関数内でウィンドウタイトルを指定できます。また、実行する必要のある関数を指定する必要があります。

コード例:

import cv2


def add_circle(e, x, y, flags, param):
    if e == cv2.EVENT_LBUTTONDBLCLK:
        cv2.circle(img, (x, y), 25, (0, 0, 255), -1)


img = cv2.imread("obj.png")
cv2.namedWindow("Draw")
cv2.setMouseCallback("Draw", add_circle)

while True:
    cv2.imshow("Draw", img)
    if cv2.waitKey(20) & 0xFF == 27:
        break
cv2.destroyAllWindows()

出力:

opencv python を使用して画像に図形(円)を描画します

上記の例のコードを理解しましょう。まず、画像を読み取り、namedWindow() 関数を使用してウィンドウを作成します。

イベント、座標、フラグ、およびその他のパラメーターを受け入れる関数 add_circle() を作成します。マウスの左ボタン(cv2.EVENT_LBUTTONDBLCLK)をダブルクリックして、イベントが同じかどうかを確認します。

ウィンドウ上でマウスをダブルクリックすると、条件は True になり、座標を circle() 関数に渡します。この関数は、マウスクリックの位置に円を作成します。これを繰り返し実行するループを作成します。

ループから抜け出すには、Escapeキーを押す必要があります。waitKey() 関数は、押されたキーを検出します。

Python で OpenCV を使用したトラックバー付きカラーパレット

Python で opencv を使用するより複雑な GUI 手法に移りましょう。これは、黒い画面を使用するとよりよく理解されます。

このために 3 次元の numpy 配列を作成します。この配列はゼロで埋められ、黒い画面として機能します。次に、前の例で行ったように、namedWindow() メソッドを使用してこの画像のウィンドウを作成します。

次に、トラックバーを作成する必要があります。トラックバーを使用して RGB 値を変更することにより、この黒い画面のカラーパレットを制御します。

トラックバーを作成するには、createTrackbar() 関数を使用します。このメソッドは、トラックバーを作成し、提供されたウィンドウにアタッチして、関数内で画像オブジェクトとトラックバーの範囲を指定します。

この場合、範囲は 0 から 255 になります。また、スライダーの位置が変わるたびに呼び出す必要のある関数を含む OnChange パラメーターを取ります。

位置が変わったときに操作を行う機能は必要ありません。したがって、操作を実行せず、pass ステートメントのみを含む関数を作成します。

特定のキーが押されるまで実行されるループを作成します。このループでは、getTrackbarPos() 位置を使用してスライダーの現在の位置を取得し、トラッカーの位置に基づいてこの画像の RBG 値を設定します。

コード例:

import cv2
import numpy as np


def ignore(x):
    pass


img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow("rgb_palette")

cv2.createTrackbar("R", "rgb_palette", 0, 255, ignore)
cv2.createTrackbar("G", "rgb_palette", 0, 255, ignore)
cv2.createTrackbar("B", "rgb_palette", 0, 255, ignore)

while True:
    cv2.imshow("rgb_palette", img)
    c = cv2.waitKey(1) & 0xFF
    if c == 27:
        break

    R = cv2.getTrackbarPos("R", "rgb_palette")
    G = cv2.getTrackbarPos("G", "rgb_palette")
    B = cv2.getTrackbarPos("B", "rgb_palette")

    img[:] = [B, G, R]

cv2.destroyAllWindows()

Python で OpenCV を使用したトラックバー付きカラーパレット

上記の例では、Python で opencv を使用して RGB カラーパレットを作成します。赤、緑、青の値用に 3つのトラックバーを作成します。

画像(黒い画面)に反映されているスライダーで値を変更します。ループから抜け出すには、waitKey() 関数を使用してEscape </ kbd »キーを押し、押されたキーを検出します。

まとめ

このチュートリアルでは、Python の opencv ライブラリに関連するさまざまな GUI テクニックと機能を紹介しました。これらの手法を詳細に示しました。

opencv ライブラリを使用した画像の読み取りと書き込みは、画像が新しく作成されたウィンドウに表示されるため、最も単純な GUI 機能と見なすことができます。この画像をエクスポートしてデバイスに保存することもできます。

次に、opencv を使用して画像に図形や線を描画する方法について説明しました。これらの図形を描画するために使用できる機能について説明し、これにユーザーインタラクションを追加し、マウスクリックを使用して図形を描画することにより、GUI 機能を追加しました。

最後の GUI 機能では、トラックバーの使用法を示します。これらは、ユーザーが変更できるスライダーです。

RGB カラーパレットトラックバーを作成します。値が変更され、画面上でその変更を確認します。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - Python OpenCV