Come determinare se un cv :: Mat è una matrice zero?

Ho una matrice che viene modificata dynamicmente in base al seguente codice;

for( It=all_frames.begin(); It != all_frames.end(); ++It) { ItTemp = *It; subtract(ItTemp, Base, NewData); cout << "The size of the new data for "; cout << " is \n" << NewData.rows << "x" << NewData.cols << endl; cout << "The New Data is: \n" << NewData << endl << endl; NewData_Vector.push_back(NewData.clone()); } 

Quello che voglio fare è determinare i frame in cui cv :: Mat NewData è una matrice zero. Ho provato a confrontarlo con una matrice zero della stessa dimensione, utilizzando sia la funzione cv :: compare () sia gli operatori semplici (ovvero NewData == NoData), ma non riesco nemmeno a compilare il programma.

C’è un modo semplice per determinare quando un cv :: Mat è popolato da zero?

ero solito

 if (countNonZero(NewData) < 1) { cout << "Eye contact occurs in this frame" << endl; } 

Questo è un modo piuttosto semplice (se non proprio il più elegante) di farlo.

Per verificare se il campo è vuoto, utilizzare empty() , se NewData è un cv :: Mat, NewData.empty() restituisce true se non ci sono elementi in NewData.

Per verificare se è tutto a zero, semplicemente, NewData == Mat::zeros(NewData.size(), NewData.type()) .

Aggiornare:

Dopo aver controllato il codice sorgente OpenCV, puoi effettivamente fare NewData == 0 per verificare che tutti gli elementi siano uguali a 0.

countNonZero (Mat) ti darà il numero di non zero in mat

Cosa ne pensi di questo..

 Mat img = Mat::zeros(cvSize(1024, 1024), CV_8UC3); bool flag = true; MatConstIterator_ it = img.begin(); MatConstIterator_ it_end = img.end(); for(; it != it_end; ++it) { if(*it != 0) { flag = false; break; } }