Opencv 踩坑日誌:不要img.at<float>(r,c) += val

背景:

measurement_count++;

for (int r = 0; r < img.rows; ++r){
      for (int c = 0; c < img.cols; ++c){
        float new_val = static_cast<float>(img.at<unsigned short>(r,c));
        sum.at<float>(r,c) += new_val; 或者 sum.at<float>(r,c) = sum.at<float>(r,c) + new_val;
        mean.at<float>(r,c) = new_sum/float(measurement_count);
      }
    }

sum.at<float>(r,c) += new_val; 或者 sum.at<float>(r,c) = sum.at<float>(r,c) + new_val;

 

問題:

例如你在row=1時候,這樣算出來的sum是對的。

但在row=2 ~ N時, sum.at<float>(r,c) 的值在row=1就被改變了,這樣算出來的sum是不對的。

例如,sum初始爲0的矩陣,在row=2的時候, sum.at<float>(r,c) 還沒被遍歷就有數值了。。。。

 

原因:

原因不明。。。

 

解決辦法:

用新建的矩陣賦值,例如sum_tmp.at<float>(r,c) = sum.at<float>(r,c) + new_val;

然後, sum_tmp.copyTo(sum);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章