#前提・実現したいこと
1、指定したファイルに入っている、写真を全て読み込む
2、読みこんだ写真の中から、輪郭を抽出する
3、輪郭を写真に書き込み、別のファイルに保存する
この一連の流れを実現したいと考えております。
1に関しては、出来ました。
また、輪郭を抽出して、ほかのフォルダに保存するということも単体では、出来ています。
それぞれを一つの機能とした時に、失敗しました。
#試したこと
【Python】フォルダ内の画像サイズを一括で変換【コピペで実行】こちらのサイトを参考にして、フォルダ内の画像サイズを変換することは、出来ました。
しかし、PILを扱ったことがなく、今までに使っていた、OpenCVを使い、輪郭検出を行い、一括保存しようとして、失敗しました。
また、下記のサイトを参考に実現しようとしました。
Python OpneCV 輪郭抽出について
OpenCV 3.0.0 beta: Error with drawing contours
OpenCVの公式アンサーサイト
#発生している問題・エラーメッセージ
エラーメッセージ
20191226_084755の変換完了! --------------------------------------------------------------------------- error Traceback (most recent call last) <ipython-input-16-88238be16f77> in <module> 19 # 輪郭を1つずつ書き込んで出力 20 im_con = im.copy() ---> 21 cv2.drawContours(im_con, contours, count, (0,255,0), 2) 22 23 full_file, ext = os.path.splitext(f) error: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\imgproc\src\drawing.cpp:2498: error: (-215:Assertion failed) 0 <= contourIdx && contourIdx < (int)last in function 'cv::drawContours'
#該当のソースコード
Python
1import os 2import glob 3import cv2 4# Setting(ここを変更して希望のサイズに変換) 5dir_location =r'C:\Users\Pictures/' 6save_location =r'C:\Users\Pictures\PCI/' 7# 取得ファイル形式一覧 8ext_list =('/*.jpg','/*.jpeg','/*.gif','/*.png') 9count=0 10for n in range(len(ext_list)): 11 file_path = dir_location + ext_list[n] 12 file_list = glob.glob(file_path) 13 for f in file_list: 14 im = cv2.imread(f) 15 16 im_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 17 retval, im_bw = cv2.threshold(im_gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) 18 19 # 輪郭の検出 20 contours, hierarchy = cv2.findContours(im_bw, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 21 22 # 全ての輪郭を書き込んで出力 23 im_con = im.copy() 24 cv2.drawContours(im_con, contours, -1, (0,255,0), 2) 25 cv2.imwrite(save_location +'/'+ name + '_resize' + ext, im_con) 26 27 # 輪郭を1つずつ書き込んで出力 28 im_con = im.copy() 29 cv2.drawContours(im_con, contours, count, (0,255,0), 2) 30 31 full_file, ext = os.path.splitext(f) 32 name = os.path.basename(full_file) 33 cv2.imwrite(save_location +'/'+ name + '_resize' + ext, im_con) 34 print(name+'の変換完了!') 35 count+=1 36print('画像の変換完了')
#教えていただきたいこと
2点あります。
1、このコードをどのように変えればいのか?
2、解決方法を導き方(解決方法を導く考え方)
この2点を教えていただきますと幸いです!
自力で解決できるようになりたいので!
回答1件
あなたの回答
tips
プレビュー