6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenCV3で起きたErrorとその解決方法 MacでOpenCV3を使うときの注意点

Posted at

問題点

ministによる学習を一通りやって、好きな画像でやるぞ! と思った矢先に起きたError(恐らくMac限定)

deep_learning_test.py
train_img_dirs = ['T','F']
train_image = []
train_label = []

for i, d in enumerate(train_img_dirs):
    # ./data/以下の各ディレクトリ内のファイル名取得
    files = os.listdir('./data/' + d)
    for f in files:
        # 画像読み込み
        img = cv2.imread('./data/' + d + '/' + f)
        img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
        # 1辺がIMG_SIZEの正方形にリサイズ
        img = cv2.resize(img, (IMG_SIZE, IMG_SIZE))
        # 1列にして
        img = img.flatten().astype(np.float32)/255.0
        train_image.append(img)

        # one_hot_vectorを作りラベルとして追加
        tmp = np.zeros(NUM_CLASSES)
        tmp[i] = 1
        train_label.append(tmp)

これをコンパイルすると...

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in ipp_cvtColor

に陥る。 なんでや

原因

https://stackoverflow.com/questions/20822288/python-opencv-cv2-opencv-error-assertion-failed-scn-3-scn-4-in-unkno
によると
print(img.shape)を実行してみて結果がNone typeになっていると画像が正しく読み込めていないらしい。
そこでprint(d)とprint(f)をして、読み込んだディレクトリとファイルを表示してみると

$ T
$ .DS_Store

が出てきた。 ディレクトリは正しく読み込めているが、ファイルに例のアレが入ってる。 .DS_Storeが読み込まれているせいで、うまく実行できていなかった。

.DS_Storeとは
アイコンの位置や表示設定などのフォルダ表示設定に関するメタデータを記録するための隠しファイル。Finder上でもリモートシステム上でもアクセスするすべてのフォルダに.DS_Storeファイルが作成されている。

解決方法

個別のディレクトリの.DS_Storeを削除

find Desktop/対象のディレクトリ -name ".DS_Store" -print  -exec rm {} ";"

全部削除

sudo find / -name ".DS_Store" -delete

今後作成しない

defaults write com.apple.desktopservices DSDontWriteNetworkStores True

あと、MacForkCleanerというアプリで簡単に消せる。

最後に

初めてのOpenCVで、書き方とか画像の形式が誤っているのかと思ってかなり悪戦苦闘してしまった。(調べても全然出てこない)
MacOSを使ってて同じ現象に陥った人の参考にして欲しい。.DS_Storeは隠しファイルなので自分はパット見だと気づかなかった。他の人は経験とかで気づくのかな?

参考サイト

macから.DS_Storeを消しさる
http://qiita.com/supersnack/items/157b69589e36f340bb29
.DS_Storeの仕組みと削除&作成しないよう設定する方法
http://uxmilk.jp/48160
Python-OpenCV cv2 OpenCV Error: Assertion failed (scn == 3 || scn == 4) in unknown function, file ......\modules\imgproc\src\color.cpp
https://stackoverflow.com/questions/20822288/python-opencv-cv2-opencv-error-assertion-failed-scn-3-scn-4-in-unkno

6
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?