Şu anda OpenCV/C++ 'un çok garip davranışıyla mücadele ediyorum. Bu i yapıyorum budur:Farklı sonuçlar, kod formatını değiştirerek yapılardaki bir vektörde bulunan çift değişkenlerin ortalamasını hesaplar mı?
1 Güncellendi: Burada daha fazla bilgi:
Ben piksel kümesi için degrade yönünü hesaplamak ve bir benlikdouble
alanında saklayabilirsiniz
struct
ilan etti. Yapı elemanları bir vektörde saklanır. Şimdi
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
}
:
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);
}
sonradan c
birkaç bir vektör saklanır ve bu gibi bakarak benim vektör her yapı-eleman saklanan her grad_orientation
ortalamasını tahmin etmek istiyorum var komik bölüm: Bunu belirli koşullar altında yaparsam, cout
, 215.963
'u yazdırır. En sık karşılaştığım sonuç budur (Bu sonuç EXACTLY). Bazı durumlarda, yukarıda belirtilen bu matrisleri eklersem veya (evet, gerçekten) grad_orientation
numaralı yapıyı kod satırında daha yüksek bir satırda taşırsam 223.442
olsun. Yani kodda iki sonuç arasındaki farkın aşağıdaki sadece geçerli:
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;
};
Yazdırılan sonuçlar yalnızca sütunun yapının bildiriminde değil, aynı zamanda kodumun farklı bölümlerini değiştirdiğimde de bağlıdır.
Bu, çift duyarlılıkla ilgili bir şey olabilir, ancak kod sütunlarını hareket ettirirsem neden değiştirilir?
Bazı arabellek taşması gibi görünüyor. Görüntü değişkenlerinizi bildiren kodu görmeden söylemek zor, ve bunların gerçekleştirilmesi ile işlev çağrıları arasında üstlerinde gerçekleştirilen işlemler. – Rook
, döngüyü nasıl yaptığınızı inceler. bitirme kriterleri craters.size(), ama sonra my_struct [i] ?? Bunun yerine kraterler beklerdim. Başka bir ipucu, iyi bir hata ayıklayıcı kullanmaktır, başka bir nota – Rolle
hiçbir zaman sorun bulacaksınız, "düzenlemek" sizin ilk sorun için tamamen ilgisiz gibi görünüyor ve opencv ile ilgili bir şey yok gibi görünüyor. muhtemelen dizi sınırları veya benzeri – Rolle