Attualmente sto combattendo con un comportamento molto strano di OpenCV/C++. Questo è quello che sto facendo:Risultati diversi che calcolano la media delle doppie variabili contenute in un vettore di strutture alterando la formattazione del codice?
Aggiornato 1: Qui maggiori informazioni:
ho calcolare l'orientamento del gradiente per un insieme di pixel e memorizzarli in un double
campo di un sé dichiarato struct
. Gli elementi struct vengono memorizzati in un vettore.
myfunct1() {
(...)
c.grad_orientation = (sum_ori/highgrads.size()) + M_PI; // +M_PI because i just want to rotate the angle around 180°.
(...)
my_struct_vector.push_back(c);
}
seguito ho ottenuto diversi c
memorizzati in un vettore e vuole stimare la media di ogni singolo grad_orientation
, immagazzinato in ogni struct-elemento del mio vettore simile a questo:
myfunct0() {
myfunct1(); //adds element to the my_struct_vector
(...)
int n = 0;
double total_ori = 0.0;
for (uint i = 0; i < my_struct_vector.size(); ++i) {
total_ori += my_struct_vector[i].grad_orientation;
n++;
}
azimuth = (total_ori/n);
cout << "Average: " << azimuth * 180/M_PI << endl; // print out in degrees
}
Ora per la parte divertente: se lo faccio in determinate circostanze, lo cout
stampa 215.963
. Questo è il risultato che ho ottenuto più spesso (ESATTAMENTE questo risultato). In alcuni casi, se aggiungo queste matrici dette sopra o (sì, davvero) se sposto il doppio campo tenendo lo grad_orientation
nella struttura una colonna più in alto in termini di codice ottengo 223.442
. Quindi la differenza tra i due risultati nel codice è solo il seguente:
struct my_struct {
std::vector<cv::Point> contour_shadow;
std::vector<cv::Point> contour_light;
cv::RotatedRect rect;
cv::Point pf;
cv::Point pc;
double grad_orientation; // this line moved one column down, beneath "grad_flag" results in a differing result.
bool grad_flag;
double grad_magnitude;
};
I risultati stampati dipendono non solo dalla posizione della colonna nella dichiarazione della struttura ma anche quando altero parti diverse del mio codice.
Questo potrebbe avere qualcosa a che fare con la doppia precisione, ma perché altera se sposto colonne di codice?
Suoni come un sovraccarico del buffer. Difficile da dire senza vedere il codice che dichiara le tue variabili immagine e le operazioni eseguite su di esse tra la loro istanziazione e le chiamate di funzione sopra. – Rook
esamina come esegui il ciclo. il criterio di finitura è craters.size(), ma poi my_struct [i] ?? Mi aspetterei invece crateri [i]. Un altro consiglio è quello di usare un buon debugger, troverai il problema in un attimo, – Rolle
, il tuo "edit" sembra totalmente estraneo al tuo primo problema e non sembra avere nulla a che fare con opencv. probabilmente fuori dai limiti dell'array o simili – Rolle