如果我有图像数据 imgA
和 imgB
,那么我想按如下方式计算 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++ 风格 cv::Mat
结构,您可以直接在矩阵上进行简单的算术运算。
cv::Mat A, B, C;
A = getImageA();
B = getImageB();
C = A - B;
或者可以使用减法函数,请参阅 here .
关于c - OpenCV 中的差异图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026840/