実現したいこと
機械学習のために保存した100マイの写真の顔の部分を矩形で囲むプログラミングを組みたいのですがエラーが出てしまい実行できません。何がいけないのでしょうか?
レクチャーよろしくお願いします!
発生している問題・エラーメッセージ
File "C:/Users/saito/PycharmProjects/kenkyu/kukei.py", line 20, in <module> gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.error: OpenCV(3.4.2) c:\projects\opencv-python\opencv\modules\imgproc\src\color.hpp:253: error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'cv::CvtHelper<struct cv::Set<3,4,-1>,struct cv::Set<1,-1,-1>,struct cv::Set<0,2,5>,2>::CvtHelper'
該当のソースコード
import cv2 import numpy as np # 先ほど集めてきた画像データのあるディレクトリ input_data_path = 'images/' # 切り抜いた画像の保存先ディレクトリ(予めディレクトリを作っておいてください) save_path = 'images111/' # OpenCVのデフォルトの分類器のpath。(https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xmlのファイルを使う) cascade_path = r"C:\Users\saito\PycharmProjects\kenkyu\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_alt.xml" faceCascade = cv2.CascadeClassifier(cascade_path) # 収集した画像の枚数(任意で変更) images_count = 100 # 顔検知に成功した数(デフォルトで0を指定) face_detect_count = 0 # 集めた画像データから顔が検知されたら、切り取り、保存する。 for i in range(images_count): img = cv2.imread(input_data_path + str(i) + ".png", cv2.IMREAD_COLOR) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) face = faceCascade.detectMultiScale(gray, 1.1, 3) if len(face) > 0: for rect in face: # 顔認識部分を赤線で囲み保存(今はこの部分は必要ない) # cv2.rectangle(img, tuple(rect[0:2]), tuple(rect[0:2]+rect[2:4]), (0, 0,255), thickness=1) # cv2.imwrite('detected.jpg', img) x = rect[0] y = rect[1] w = rect[2] h = rect[3] cv2.imwrite(save_path + 'images' + str(face_detect_count) + '.jpg', img[y:y+h, x:x+w]) face_detect_count = face_detect_count + 1 else: print ('image' + str(i) + ':NoFace')
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/28 15:41
2018/08/28 15:42
2018/08/28 20:24
2018/08/29 01:04
2018/08/29 09:24
2018/08/29 13:28
2018/08/29 17:27
2018/08/30 01:27
2018/08/30 03:30
2018/08/30 03:45