根据您提供的代码,首先需要确保输入的图像集合(images
)非空,并且所有图像具有相同的尺寸和通道数。如果这些条件满足,那么可能导致 finalAverageImage
始终为黑色图像的问题是因为计算平均值时使用了整数除法。请尝试将除法操作修改为浮点数除法,以确保结果精确到小数点以下:
cv::Mat averageImage(height, width, CV_8U, cv::Scalar(0));
for (int i = 0; i < height; ++i)
{
for (int j = 0; j < width; ++j)
{
unsigned int sum = 0;
for (int k = 0; k < images.size(); ++k)
{
sum += images[k].at<uchar>(i, j);
}
averageImage.at<uchar>(i, j) = static_cast<uchar>(sum / static_cast<float>(images.size()));
}
}
finalAverageImage = averageImage.clone();
通过将除法操作中的分子或分母转换为浮点数类型,可以执行浮点数除法并获得正确的平均值。最后,使用 static_cast
将浮点结果转换回无符号字符类型 (CV_8U
) 并赋值给 averageImage.at<uchar>(i, j)
。
内容由零声教学AI助手提供,问题来源于学员提问