質問: '__main__': main() ``` ### 試したこと フィルタ処理に関しては1画像のみの処理ではうまく行えていたのですが、複数一括処理を行うところでうまく行きません。 エラーから推測するに、うまく画像が取り込めていないのではと考えますが、どこが悪いのかどう対応すれば良いかがわかりません。 ### 補足情報(FW/ツールのバージョンなど) macOS Catalina(10.15.5) jupyter notebook6.0.1
回答: Python 2 をお使いなのでしょうか? 補足情報に Python のバージョンもあったほうがよいと思います。 問題点 以下の条件式は意図どおり動きません。 ``` if ext == u'.png' or u'.jpeg' or u'.jpg': ``` 「`ext == u'.png'` または `ext == u'.jpeg'` または `ext == u'.jpg'`」 ではなく、「`ext == u'.png'` または `u'.jpeg'` または `u'.jpg'`」 と解釈されます。空でない文字列は True と評価されるので、したがって、この条件式は常に True になります。 以下のように修正するとよいでしょう。 ``` if ext == u'.png' or ext == u'.jpeg' or ext == u'.jpg': または if ext in [u'.png', u'.jpeg', u'.jpg']: ``` 補足 ``` error: OpenCV(4.1.2) /Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor' ``` `cv2.imread()` はファイルを読み込みに失敗した場合は None を返し、その時点ではエラーにならず、後続の処理 `cv2.cvtColor()` でエラーになります。 ファイル読み込みに失敗するときに気づけるように、img が None でないことをチェックする assert を入れておくとよいと思います。 ``` img = cv2.imread(abs_name) assert img is not None, os.path.abspath(abs_name) ```