python初心者です。
画像ファイルを目視し、key操作(1or2or3)でそれぞれclass1,class2,class3に振り分けるプログラムを考えています。
1or2or3以外のkey操作が行われたらそのまま画像表示させ、1or2or3が入力されたら次の画像を表示させたいと思っております。
フォルダの中のファイルがなくなったら、プログラムは終了しますが、途中で中断させようとしたときにCtrl+cを受け付けません。
途中でプログラムを終了させるためにCtrl+zで強制終了しなくてはいけなく、Ctrl+cでプログラムを中断させたいのです。
while Trueが悪さをしているように思いますが、elseのあとにbreakをしてしまうと1or2or3以外のキー操作がされたときでも画像が次のものになってしまいます。
まとめますと
・1or2or3以外のキー操作をされたら、画像表示を維持したい。
・プログラムの途中でCtrl +c を受け付け正常処理させたい。
python
1 2import cv2 3import os 4import glob 5import shutil 6 7sort1='/home/user/Desktop/code.test/class1' 8sort2='/home/user/Desktop/code.test/class2' 9sort3='/home/user/Desktop/code.test/class3' 10target_dir='/home/user/Desktop/code.test' 11 12#保存先ディレクトリがなかったら作成する 13if not os.path.exists(sort1): 14 os.mkdir(sort1) 15if not os.path.exists(sort2): 16 os.mkdir(sort2) 17if not os.path.exists(sort3): 18 os.mkdir(sort3) 19 20 21filenames = os.listdir(target_dir) 22for file in filenames: 23 multiple = 2 24 img = cv2.imread(target_dir+'/'+file) 25 target_file=target_dir+'/'+file 26 27 if img is None: 28 print('through') 29 else: 30 height = img.shape[0] 31 width = img.shape[1] 32 img = cv2.resize(img , (int(width * multiple), int(height * multiple))) 33 cv2.imshow("image", img) 34 while True: 35 key = cv2.waitKey() 36 if key == 49: 37 shutil.move(target_file,sort1) 38 break 39 elif key == 50: 40 shutil.move(target_file,sort2) 41 break 42 elif key == 51: 43 shutil.move(target_file,sort3) 44 break 45 #他のキーが入力されたらそのままにする 46 else: 47 print('pass', str(key))

回答1件
あなたの回答
tips
プレビュー