Care este soluția la această eroare a OpenCV cu video.capture() și nu citește corect cu video.read? (Complet nou pentru raspberry pi) (Raspberry Pi, Pi 3, Raspicam, Noobs, Opencv)

Ralph a intrebat.

Sunt complet nou în raspberry pi și caut ajutor cu aceeași eroare pe care încerc să o rezolv în ultimele zile. Am reinstalat complet OpenCV de două ori acum din două metode pe un raspberry pi3 modal B

Multe dintre pachete erau depășite, așa că s-ar putea ca asta să fie problema mea… M-am uitat prin multe pentru cele actualizate și le-am descărcat, dar a funcționat doar o zi și acum m-am întors de unde am plecat cu următoarea eroare-

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file 
/build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/imgproc/src/color.cpp, line 3737
    Traceback (most recent call last):
     File "faceRecognition.py", line 11, in <module>
       gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
     cv2.error: /build/opencv-ISmtkH/opencv-2.4.9.1+dfsg/modules/imgproc
/src/color.cpp, line 3737: error: (-215) scn == 3 || scn == 4 in function cvtColor

Apoi, iată fișierul faceRecognition.py realizat în python 3 (3.4.2) [am încercat și în python 2 (2.7.9)]:

# multiple cascades: https://github.com/Itseez/opencv/tree/master/data/haarcascades
# https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml

import numpy as np
import cv2

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

cap = cv2.VideoCapture(0)

while 1:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]

    cv2.imshow('img',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

cap.release()
cv2.destroyAllWindows()

Am revăzut și am verificat să mă asigur că Haarcascade a funcționat și a fost conectat. Am făcut acest lucru chiar ieri și eroarea dispăruse, iar programul funcționa bine. Am oprit pi-ul și l-am lăsat să stea afară peste noapte. L-am conectat în dimineața următoare și acea eroare a apărut din nou. software-ul pe care îl folosesc apropo este instalat de la Noobs. Am încercat să schimb portul pentru camera pi la 1, dar nu a fost soluția. M-am uitat prin practic toate forumurile și se pare că nimic nu a funcționat pentru mine, dar am suspiciunea că pur și simplu camera pi nu încarcă video în formatul corect pentru ca pi să proceseze corect seria de imagini jpg. Dacă îmi puteți oferi vreun ajutor ar fi minunat, vă mulțumesc și anunțați-mă dacă aveți nevoie de alte informații.

2 răspunsuri
Technico.top

Eroare OpenCV: Assertion failed (scn == 3 || scn == 4) in cvtColor De obicei înseamnă că imaginea pe care încercați să o convertiți nu este în formatul de culoare așteptat.

Deoarece convertiți imagini din culoare în gri, nu trebuie să vă img ar trebui să aibă un format precum RBG, BGR sau RGBA. Aceste formate utilizează 3 sau 4 culori pe pixel (așa cum se menționează în mesajul de eroare).

Așadar, este posibil să doriți să salvați imaginea odată capturată și să căutați aceste 2 puncte:
– Este imaginea validă ? (un cadru de dimensiune 0 poate genera această eroare)
– Imaginea este deja alb-negru ?

thewaywewere

Ați testat codul dvs. și funcționează pentru a detecta fața frontală. Suspectez că problema ar putea fi cauzată de camera Pi. Puteți încerca mai jos.

  1. Verificați de două ori dacă cablul FPC al camerei Pi este bine introdus.
  2. Schimbați bucla while ca while cap.isOpened(): pentru o mai bună verificare a stării camerei.
  3. Schimbați sursa de captură video la cv2.VideoCapture(-1) pentru a utiliza una activă.

Sper că acest ajutor.