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

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

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

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

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

Q&A

解決済

1回答

3692閲覧

大量の画像から顔の部分のみトリミングして保存したい(OpenCV)

genosuke

総合スコア12

OpenCV

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

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

0グッド

1クリップ

投稿2019/11/29 14:02

前提・実現したいこと

機械学習用画像の準備のために大量の画像から顔の部分だけをトリミングして保存しようと試みています。
トリミング前の画像はmodelフォルダに保存しており、トリミングした顔画像をsaveフォルダに保存しようとしています。
以下のプログラムコードを実行したところエラーメッセージは表示されなかったのですが、saveフォルダの中にトリミングされた顔の画像が1枚も保存されていませんでした。

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

C:\Users\Taisei\Anaconda3\envs\opencv\lib\site-packages\numpy\_distributor_init.py:32: UserWarning: loaded more than 1 DLL from .libs: C:\Users\Taisei\Anaconda3\envs\opencv\lib\site-packages\numpy.libs\libopenblas.PYQHXLVVQ7VESDPUVUADXEVJOBGHJPAY.gfortran-win_amd64.dll C:\Users\Taisei\Anaconda3\envs\opencv\lib\site-packages\numpy.libs\libopenblas.TXA6YQSD3GCQQC22GEQ54J2UDCXDXHWN.gfortran-win_amd64.dll stacklevel=1) ↑ここで実行が終わってしまいます。

###ソースコード

python

1import cv2 2import matplotlib.pyplot as plt 3import numpy as np 4import sys, os 5from PIL import Image 6 7 8#入力ファイルのパスを指定 9in_jpg = "C:\python code\model" 10out_jpg = "C:\python code\save" 11 12#リストで結果を返す関数 13def get_file(dir_path): 14 filenames = os.listdir(dir_path) 15 return filenames 16 17pic = get_file(in_jpg) 18 19for i in pic: 20 # 画像の読み込み 21 image_gs = cv2.imread(in_jpg + i) 22 23 # 顔認識用特徴量ファイルを読み込む --- (カスケードファイルのパスを指定) 24 cascade = cv2.CascadeClassifier('C:\Users\Taisei\Anaconda3\envs\OpenCV\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml') 25 26 # 顔認識の実行 27 face_list = cascade.detectMultiScale(image_gs,scaleFactor=1.1,minNeighbors=1,minSize=(1,1)) 28 29 # 顔だけ切り出して保存 30 no = 1; 31 for rect in face_list: 32 x = rect[0] 33 y = rect[1] 34 width = rect[2] 35 height = rect[3] 36 dst = image_gs[y:y + height, x:x + width] 37 save_path = out_jpg + '/' + 'out_(' + str(i) +')' + str(no) + '.jpg' 38 39 #認識結果の保存 40 a = cv2.imwrite(save_path, dst) 41 plt.show(plt.imshow(np.asarray(Image.open(save_path)))) 42 print(no) 43 no += 1 44

試したこと

ここに問題に対して試したことを記載してください。

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

参考にしたサイトの方はmacOSでしたが私はWindows10なのでそこで問題が発生しているのかもしれません。

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

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

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

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

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

Q71

2019/11/29 23:18

画像はカラーですか?グレースケール化していないように思うのですが?
genosuke

2019/11/30 03:11

画像はカラーです! 画像1枚だけでトリミングしてみた時にグレースケール化しなくてもトリミング出来たのですが、グレースケール化した方がいいですか?
Q71

2019/11/30 05:24

私が以前参照したサイトではグレー化していたのですが、カラーのままでもいいみたいです。処理速度が速くなるようです。
genosuke

2019/12/01 06:18

そうなんですね! 知らなかったので試したいと思います! ありがとうございます!
guest

回答1

0

ベストアンサー

Python

1 2image_gs = cv2.imread(in_jpg + i) 3

この行、読もうとしているファイル名(in_jpg + i)を確認してみてください。
ちゃんとそれ用のライブラリがありますから利用しましょう。

投稿2019/11/29 23:21

Q71

総合スコア995

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

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

genosuke

2019/12/01 06:20

質問失礼します。 入力ファイル(in_jpg = "C:\python code\model")のパスが間違っているのでしょうか??
Q71

2019/12/01 08:33

やってみました? “model” + “file.jpg” は “modelfile.jpg” ですよ。これは、欲しいパス名ですか?
genosuke

2019/12/03 09:14

パスをよく確認したらできました!! 詳しく教えていただきましてありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問