LoginSignup
1
1

More than 3 years have passed since last update.

右クリックと左クリックで画像を指定フォルダに移動させてみた

Last updated at Posted at 2020-07-30

はじめに

 楽に画像を分類できればなーと考えながら作りました。

作ったもの

 右クリックと左クリックで画像を指定フォルダに移動させるプログラムを作りました。

media.gif

 画像は神奈川工科大学の標準画像データベースSIDBAからダウンロードしました。
explorer.jpg

 プログラムを実行すると、5枚の画像が表示されます。
window.jpg

 地球の画像をクリックしました。ウィンドウが更新されます。

updated.jpg

 クリックした地球の画像が移動されました。今回は左クリックだったのでLのフォルダに出力されています。

updatedWindow.jpg

コード

imageMover.py
import cv2
import glob
import shutil
import os
import numpy as np

#画像のサイズは200pxで統一
size = (200, 200)  

name = []   #ファイル名
data = []   #ファイルのデータ
coordinates = []    #クリック時の座標

#移動先のフォルダを作成。LとRがそれぞれ左クリックと右クリックに対応。
os.makedirs('./L', exist_ok=True)
os.makedirs('./R', exist_ok=True)

#ファイルの読み込み
for file in glob.glob('*.bmp'):
    img = cv2.imread(file)
    img = cv2.resize(img, size) 
    name.append(file) 
    data.append(img)

#マウスクリック時に実行される関数
def click_event(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        coordinates[0:3] = [x, y, 'L']
    if event == cv2.EVENT_RBUTTONDOWN:
        coordinates[0:3] = [x, y, 'R']

#画像の枚数
hasWindow = len(data)

#画像の残り枚数が1枚以上の場合に実行
while hasWindow > 0:
    img = cv2.hconcat(data[:5])

    while(1):
        cv2.imshow('img', img)
        cv2.setMouseCallback("img", click_event) #クリック時

        #クリック時の座標を取得し、対応する画像を移動
        if len(coordinates) != 0:
            n = coordinates[0]//200
            shutil.move(name[n], coordinates[2]+'/'+name[n])
            print(F'フォルダ {coordinates[2]}{name[n]} を移動しました')
            data.pop(n)
            name.pop(n)
            coordinates = []
            hasWindow -= 1 #画像の残り枚数を更新
            break

        #座標を初期化
        coordinates = []    

        #キー入力があるか
        key = cv2.waitKey(100) & 0xff

        #キーボードかxが押されたらウィンドウを閉じる
        if key != 255 or cv2.getWindowProperty('img', cv2.WND_PROP_AUTOSIZE) == -1:
            cv2.destroyAllWindows()
            exit()

 Githubにもアップロードしています。

結論

 手動の方が早いのでは?

おわりに

 画像の表示数を増やすとかでもっと工夫できそうですね。

 最後までご覧いただきありがとうございました。ご指摘・コメントをお待ちしております。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1