std::vector<uchar> vChannel(hsv.rows * hsv.cols);
// std::vector<double> ivChannel(hsv.rows * hsv.cols);
for (int y = 0; y < hsv.rows; ++y) {
for (int x = 0; x < hsv.cols; ++x) {
vChannel[y * hsv.cols + x] = hsv.at<cv::Vec3b>(y, x)[2];
// ivChannel[y * hsv.cols + x] = (double)vChannel[y * hsv.cols + x];
}
}
double vAvg = static_cast<double>(std::accumulate(vChannel.begin(), vChannel.end(), 0)) / vChannel.size();
// double vAvg = static_cast<double>(std::accumulate(ivChannel.begin(), ivChannel.end(), 0)) / ivChannel.size();
std::cout << vAvg << "\t ";
不论是用上面未注释的代码,还是注释掉的代码,vAvg都会返回负值。
已验证vChannel中所有均为正数。
求问为啥上溢?std::accumulate有隐式数据类型转换?