OpenCV的cv::absdiff(InputArray src1, InputArray src2, OutputArray dst)使用什么方法/算法?

对于1通道Mat,它是否计算src1的每个单元格/体素与体素在src2相同位置之间的颜色距离?是否计算强度差或色差或其他?它是最坏情况,平均情况和最佳情况下的运行时O(N)(其中N是Mat中的体素数)吗?绝对差如何计算?

就运行时复杂度而言,cv::canny()cv::absdiff()慢还是快?速度差异明显吗?

最佳答案

absdiff 是矩阵上的简单操作。它为每个通道计算每个像素的差的绝对值。

操作是:

// pseudocode
Mat src1, src2, dst;
...
for each row : r
    for each column : c
        for each channel : ch
            dst(r,c,ch) = abs(src1(r,c,ch) - src2(r,c,ch))

您可以看到复杂度为O(N),其中N = rows * cols * channels,因为您必须扫描整个矩阵。这也是高度乐观的。

canny相反是算法,带有lot of steps involved
我不知道它的复杂性,但是至少O(N)的Nabsdiff大得多。

因此,cannyabsdiff慢得多,但这不是一个公平的比较。

OpenCV没有体素的概念。

关于c++ - cv::absdiff()使用什么方法/算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41759804/

10-10 20:56