【问题标题】:Difference Images in OpenCVOpenCV中的差异图像
【发布时间】:2012-01-27 22:56:23
【问题描述】:

如果我有图像数据imgAimgB,那么我想计算imgC 如下:

for (int i = 0; i < numPixelsInA; i++) {
    imgC[i] = max(0, imgA[i]-imgB[i]);
}

如果不编写基本上类似于上面的代码,我看不出在 openCV 中没有办法做到这一点。很好奇我是否遗漏了什么。

作为对上述内容的警告,imgA 和 imgB 是 OpenCV uchar,因此,要真正完成上述工作,必须将行替换为:

imgC[i] = (uchar) max(0, ((int) imgA[i]) - ((int) imgB[i]));

这就是为什么 OpenCV 实现对我更有吸引力的原因,因为它们可以正确处理这些饱和问题,并且如果/当我们获得 IPP 时,我们可以“免费”获得适当的加速。

【问题讨论】:

    标签: c image-processing opencv


    【解决方案1】:

    使用较新的 C++ 样式 cv::Mat 结构,您可以直接在矩阵上进行简单的算术运算。

    cv::Mat A, B, C;
    A = getImageA();
    B = getImageB();
    
    C = A - B;
    

    或者,减法函数可能有用,请参阅here

    【讨论】:

    • Subtract 正是我想要的,从文档中我不清楚该函数是在哪个版本的 OpenCV 中引入的。你知道吗?我现在是 2.1。
    • 我相信该链接适用于最新版本的文档,因此是 OpenCV 2.3,但我不知道该功能是何时引入的,因此它是从哪个版本可用的。
    【解决方案2】:

    您可以使用compare 的组合来创建蒙版,然后添加/减去以仅对具有蒙版集的像素进行操作 - 但我会按照您的方式进行操作!

    【讨论】:

    • 我正在做的问题是,我们不能轻易利用 IPP 加速,最终我认为它会比处理饱和算法的 OpenCV 实现慢很多正确。
    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多