【问题标题】:EmguCV/OpenCV Image addition/subtractionEmguCV/OpenCV 图像加减法
【发布时间】:2010-12-13 04:09:50
【问题描述】:

我正在使用 EmguCV 并尝试减去 2 个图像来创建一个类似于 AForge .NET 的 MoveTowards 过滤器的过滤器。

这就是我对上述 URL 稍作修改的版本尝试做的事情。给定 2 个图像,源图像和叠加层 - 它会缓慢地将源图像移向叠加层。它基于以下几点:

result = source + movementFactor * (overlay - source);

其中 result、source 和 overlay 是图像,motionFactor 是 0 到 1 范围内的变化率。

当我在代码中尝试此操作时,motionFactor 等于 1,结果看起来一团糟(有类似运动轨迹的东西)。为了进一步测试它,我从上面的等式中删除了 moveFactor,并使结果 = 源 + 覆盖 - 源。我希望看到覆盖图像作为结果,我确实做到了,但图像的一个区域正在闪烁。

我猜当加/减发生时,像素强度会被限制在上限或下限。

我可以用这个完成我想要的:

for (int i = 0; i < src.Height; i++)
{
    for (int j = 0; j < src.Width; j++)
    {
        res[i, j] = new Gray(src[i, j].Intensity + movementFactor * (ovr[i, j].Intensity - src[i, j].Intensity));
    }
}

但这会显着减慢处理速度。如何克服上述加法/减法问题或速度问题?感谢您的回答!

【问题讨论】:

    标签: c# image opencv subtraction emgucv


    【解决方案1】:

    我会在这里发布我找到的答案,以防将来有人遇到同样的问题。

    你会这样做:

    Image<Gray,Byte> result = new Image<Gray,Byte>(source.Size);
    CvInvoke.cvAddWeighted(source, 1.0-movementFactor, overlay, movementFactor, 0.0, result);
    

    来源:EmguCV 的论坛,这里是给我回复的post

    【讨论】:

      【解决方案2】:

      我会在这里发布我找到的答案,以防有人遇到 以后同样的问题。

      你会这样做:

      Image<Gray,Byte> result = new Image<Gray,Byte>(source.Size);
      CvInvoke.cvAddWeighted(source, 1.0-movementFactor, overlay, movementFactor, 0.0, result); 
      

      来源:EmguCV 的论坛,这里是 给我回复的帖子

      请注意,有一个更简洁的语法:

      var result = frame.AddWeighted(1.0 - movementFactor, overlay, movementFactor, 0.0);
      

      【讨论】:

        猜你喜欢
        • 2018-01-30
        • 1970-01-01
        • 2012-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-09
        相关资源
        最近更新 更多