前提・実現したいこと
プログラミング初心者です。
ファイル内の画像を一括で読み込み、読み込んだ画像をトリミングしたいです。
その際、一枚ごとにトリミングする領域を選択したいと考えています。
そしてトリミングした画像は新しく作ったディレクトリに保存したいです。
以下のエラーメッセージが発生しました。
ご指摘、アドバイスをどうぞよろしくお願いします。
発生している問題・エラーメッセージ
Select a ROI and then press SPACE or ENTER button! Cancel the selection process by pressing c button! Traceback (most recent call last): File "triming_vo3.py", line 20, in <module> selected = cv2.selectROI(img) cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-71670poj\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
python
1### 該当のソースコード 2 3import cv2 4import os 5import sys 6 7if __name__ == '__main__': 8 args = sys.argv 9 data_dir = args[1].replace('\', '/') 10 trimed_dir = data_dir + 'trimed' 11 os.mkdir(trimed_dir) 12 files = os.listdir(data_dir) 13 img_files = [ 14 f for f in files if '.tif' in f or '.jpg' in f or '.png' in f] 15 print(img_files) 16 for img_file in img_files: 17 img_dir = data_dir + img_file 18 img = cv2.imread(img_dir) 19 20 selected = cv2.selectROI(img) 21 if sum(selected): 22 imCrop = img[int(selected[1]):int(selected[1]+selected[3]), 23 int(selected[0]):int(selected[0]+selected[2])] 24 file_dir = data_dir + trimed_dir + '/' + img_file 25 cv2.imwrite(file_dir, imCrop) 26 print('All images are saved') 27
試したこと
以下の3点です。
- imreadの読み込みができていないと考え、ファイル名を半角英数字に直しました。しかしエラーメッセージが変わらず。
- selected = cv2.selectROI(img)のところで、エラーメッセージが表示されているので、正しい引数かどうか調べました。しかし、ファイル名のimg_dirとしているため、問題ないと考えています。
- img = cv2.imread(img_dir)の下の行に、print(img.shape())としましたが、'NoneType' object has no attribute 'shape'なエラーが出ました。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー