質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3416閲覧

OpenCV(python3)を用いたフォルダ内画像の一括フィルタ加工に関するご質問です

MT23

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/10 23:32

前提・実現したいこと

OpenCV, pythonにて画像編集を行おうとしています。
あるフォルダ内の画像全てに対してフィルター処理などを行おうとしておりますが、
その際次のようなエラーメッセージが発生しました。

なお、ソースコードはガウシアンフィルタの例です。
「before」フォルダ内の画像を全て読み込み、フィルタ処理を行ったのちに「after」フォルダに保存しようとしています。

プログラミング初心者のため、基本的なことが原因でしたらすみません。
アドバイスのほどよろしくお願いします。

発生している問題・エラーメッセージ

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'

該当のソースコード

import os import cv2 import numpy as np def main(): data_dir_path = u"./before/" file_list = os.listdir(r'./before/') data_dir_path2 = u"./after/" for file_name in file_list: root, ext = os.path.splitext(file_name) if ext == u'.png' or u'.jpeg' or u'.jpg': abs_name = data_dir_path + '/' + file_name img = cv2.imread(abs_name) #以下各画像に対する処理を記載する gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) dst = cv2.GaussianBlur(gray, ksize=(3, 3), sigmaX=1.3) abs_name2 = data_dir_path2 + '/' + file_name cv2.imwrite(abs_name2, dst) if __name__ == '__main__': main()

試したこと

フィルタ処理に関しては1画像のみの処理ではうまく行えていたのですが、複数一括処理を行うところでうまく行きません。
エラーから推測するに、うまく画像が取り込めていないのではと考えますが、どこが悪いのかどう対応すれば良いかがわかりません。

補足情報(FW/ツールのバージョンなど)

macOS Catalina(10.15.5)
jupyter notebook6.0.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Python 2 をお使いなのでしょうか?
補足情報に Python のバージョンもあったほうがよいと思います。

問題点

以下の条件式は意図どおり動きません。

python

1if 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 になります。
以下のように修正するとよいでしょう。

python

1if ext == u'.png' or ext == u'.jpeg' or ext == u'.jpg': 2または 3if 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 を入れておくとよいと思います。

python

1img = cv2.imread(abs_name) 2assert img is not None, os.path.abspath(abs_name)

投稿2020/07/10 23:43

編集2020/07/10 23:44
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MT23

2020/07/10 23:50

詳しくないものにもわかりやすくご説明頂きありがとうございました。 解決いたしました。 assertにつきましては早速追加してみました。 なるほどですね。 なお、pythonのバージョンはpython3でした。 以後気をつけます。
tiitoi

2020/07/10 23:52

すいません。タイトルに Python3 と書いてありましたね。失礼しました。 解決したようでよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問