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

这就是我从上面的 URL 中稍微修改的版本尝试做的事情。给定 2 个图像,源图像和覆盖图像 - 它会慢慢地将源图像移向覆盖图像。它基于以下内容来执行此操作:

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

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

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

我猜测当进行加法/减法时,像素强度会被限制在上限或下限内。

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

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));
    }
}

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

有帮助吗?

解决方案

我会后我发现在这里的答案,万一有人在将来在同样的问题上运行。

这是你会怎么做:

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

来源:EmguCV的论坛,这里是这给了我答复

其他提示

  

我会后我发现在这里的答案,万一有人跨越运行   同样的问题在未来。

     

这是你会怎么做:

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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top