ZBLOG

unsigned int sum = 0; for (int k = 0; k < images.size(); ++k) { for (int i = 0; i < height; ++i) { for (int j = 0; j < width; ++j) { sum += images[k].at

要将多张图对应位置相加并求平均得到一张图,你可以修改代码如下:

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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=16772

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?