!!! サイト改修中のため表示が乱れる場合があります(1月末頃まで) !!!
画像処理

14-28. OpenCVのマウス操作でドラッグ&ドロップお絵かき

やること

今回は手短に、OpenCVのマウスイベントでお絵描きをします。

調べてみるとドラッグ&ドロップそのものを検出するメソッドがないらしいので、「クリックしたとき」と「離したとき」のメソッドを使って擬似的に再現しました。

実行環境

ウィンドウが立ち上がるのでGoogle Colabではできません。Macは大丈夫でしょうか?

WinPython3.6をおすすめしています。

WinPython - Browse /WinPython_3.6/3.6.7.0 at SourceForge.net
Portable Scientific Python 2/3 32/64bit Distribution for Windows

コード

最小コードです。

import cv2
import numpy as np
from copy import deepcopy

#マウスイベント
def onMouse(event, x, y, flag, params):
    global drag, start, end
    
    #レフトボタンをクリックしたら
    if event == cv2.EVENT_LBUTTONDOWN:
        #ドラッグ開始座標を記録
        start = (x, y)
        #ドラッグモードON
        drag = True
        
    #レフトボタンを離したら
    if event == cv2.EVENT_LBUTTONUP:
        #ドラッグ終了座標を記録
        end = (x, y)
        #ドラッグモードOFF
        drag = False
        #元画像に線を書き込んで画面更新
        cv2.line(img, start, end, (0, 0, 0))
        cv2.imshow(wname, img)
    
    #ドラッグ中
    if drag:
        #一時表示用の画像をコピー
        img2 = deepcopy(img)
        #コピー画像に線、ドラッグ開始座標と現在座標を結ぶ
        cv2.line(img2, start, (x, y), (0, 0, 0))
        #コピー画像で画面更新
        cv2.imshow(wname, img2)

#白い画像作成
img = np.ones((300, 400, 3), 'uint8') * 255

#パラメータ初期化
drag = False
start = (0, 0)
end = (0, 0)

#準備
wname = 'aaa'
cv2.namedWindow(wname)
cv2.setMouseCallback(wname, onMouse)

#画像を立ち上げてスタート
cv2.imshow(wname, img)
cv2.waitKey()

おわりに

「vcStitching」に使っています。

リアクションのお願い

「参考になった!」「刺激された!」と思ったらぜひリアクションをしましょう。エンジニアの世界はGive and Takeによって成り立っています。これからも無料で良質な情報にアクセスできるよう、Giveする人への感謝をリアクションで示しましょう!

この記事をシェアする

自身のブログ等で使用する場合は引用を忘れずに!

また、寄付も受け付けています。コーヒー1杯でとても喜びます(*˘︶˘*)

 Amazonでギフト券(アマギフ)を贈る

こちらのリンク から金額を指定してお贈りください。(デフォルトで10000円になっているのでご変更ください)

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 Amazonで食事券(すかいらーく優待券)を贈る

500円 1000円 2000円 5000円 からお贈りください。

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 その他、ギフト券やクーポン券をメールで贈る

デジタルのギフト券/クーポン券はメールアドレス(staffあっとvigne-cla.com)までお送りください。受領の返信をいたします。
紙のギフト券/クーポン券は 「郵便物はこちらへ」の住所 まで送付してください。名刺やメールアドレスを同封していただければ受領の連絡をいたします。
余った株主優待券等の処理におすすめです。
いずれも見返りはありませんのでご了承ください。

不明点はSNSでお気軽にご連絡ください

ビネクラのTwitter・Youtubeでコメントをください!


Slack・Discordの場合はこちらの公開グループに参加してShoya YasudaまでDMをください!


※当ブログに関することは何でもご相談・ご依頼可能です。

この記事を書いた人
Yasuda

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

タイトルとURLをコピーしました