ZBLOG

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 < image...

根据您提供的代码,首先需要确保输入的图像集合(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助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?