要将多张图对应位置相加并求平均得到一张图,你可以修改代码如下:
cv::Mat sumImage(height, width, CV_32S, cv::Scalar(0)); // 使用CV_32S类型的矩阵来保存累加结果
for (const auto& image : images)
{
cv::Mat temp;
image.convertTo(temp, CV_32S); // 将输入图像转换为CV_32S类型以避免溢出
sumImage += temp; // 对应位置进行累加
}
cv::Mat averageImage(height, width, CV_8U);
for (int i = 0; i < height; ++i)
{
for (int j = 0; j < width; ++j)
{
averageImage.at<uchar>(i, j) = sumImage.at<int>(i, j) / images.size(); // 求平均值
}
}
finalAverageImage = averageImage.clone();
上述代码中,我使用了CV_32S类型的矩阵sumImage来保存累加结果。在每次循环中,先将当前输入图像image转换为CV_32S类型,并与sumImage对应位置相加得到累加结果。最后,通过除以images.size()来求得平均值,并将结果存储在averageImage中。
请注意,这里的averageImage仍然是CV_8U类型的矩阵,在计算过程中使用了CV_32S类型的sumImage来避免溢出问题。最后再将averageImage复制给finalAverageImage。
内容由零声教学AI助手提供,问题来源于学员提问




