Как исправить эту ошибку в pycharm? cv2.ошибка: OpenCV (3.4.2) ошибка: (-215: ошибка утверждения)

#python #opencv

#python #opencv

Вопрос:

Я новичок в python и opencv, я хочу обрезать изображения лиц из моих входных изображений. Я действительно не знаю, где что-то пошло не так, может кто-нибудь помочь мне это исправить?

Я думаю, что может быть что-то не так с каталогом входных изображений. Итак, я изменил все ‘/’ на », это все равно неправильно. Кроме того, в этом каталоге есть много вложенных папок, и в каждой вложенной папке есть несколько необработанных изображений.

 import cv2
import os


def fetch_face_pic(img,face_cascade):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=10, minSize = (30, 30), flags = 0)

    for(x, y, w, h) in faces:
        crop = img[y:y h, x:x w]
    return crop


face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_defalut.xml')

#path_save = '/Users/oysdfx/Desktop/Face-anti-spoofing-master/crop/ImposterCrop'
path_read = '/Users/oysdfx/Desktop/Face-anti-spoofing-master/raw/ImposterRaw'

for file in os.listdir(path_read):
    pic = os.path.join(path_read, file)
    img = cv2.imread(pic)
    crop = fetch_face_pic(img, face_cascade)

    resized_img = cv2.resize(img, (64, 64), interpolation=cv2.INTER_CUBIC)
    cv2.imwrite(pic, resized_img)
 

На самом деле я хочу вырезать лица из входных изображений и сохранить их в новой папке. Я не знаю, как это реализовать. Я запускаю этот фрагмент кода и получаю сообщение об ошибке следующим образом:

 Traceback (most recent call last):
  File "/Users/oysdfx/Desktop/Undergraduate_Thesis/Face_Anti-Spoofing/crop_face.py", line 86, in <module>
    crop = fetch_face_pic(img, face_cascade)
  File "/Users/oysdfx/Desktop/Undergraduate_Thesis/Face_Anti-Spoofing/crop_face.py", line 70, in fetch_face_pic
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(3.4.2) /opt/concourse/worker/volumes/live/9523d527-1b9e-48e0-7ed0-a36adde286f0/volume/opencv-suite_1535558719691/work/modules/imgproc/src/color.hpp:253: error: (-215:Assertion failed) VScn::contains(scn) amp;amp; VDcn::contains(dcn) amp;amp; VDepth::contains(depth) in function 'CvtHelper'


Process finished with exit code 1
 

Ответ №1:

Это не имеет никакого отношения к вашей IDE, PyCharm. Вероятно, ваш путь к изображению неверен. Проверьте, есть ли img это None , прежде чем двигаться дальше. Если это так, выведите path ( pic ), и вы увидите, что это неверно.

 # [...]

for file in os.listdir(path_read):
    pic = os.path.join(path_read, file)
    img = cv2.imread(pic)
    if img is None:
        raise Exception('Invalid image: {}'.format(pic))
    crop = fetch_face_pic(img, face_cascade)

# [...]
 

Комментарии:

1. Я использую mac os, поэтому спереди нет ‘c:’. Но я действительно не знаю, как написать правильный путь. Должен ли я написать весь путь к изображениям? Но у меня много фотографий, и они находятся в разных подпапках ‘ImposterRaw’. Как я должен это написать?

2. @Scarlett вы прочитали / запустили код? Проблема может исходить из каталога, а не из изображения.

3. да, я запустил код. Я знаю, что это происходит из каталога, но я не знаю, как написать правильный путь?

4. @Scarlett Вместо того, чтобы создавать Exception вы можете continue . Кроме того, если вы хотите пройти рекурсивно, это не тот путь. В stackoverflow есть много вопросов по этой теме.