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)的
N
比absdiff
大得多。因此,
canny
比absdiff
慢得多,但这不是一个公平的比较。OpenCV没有体素的概念。
关于c++ - cv::absdiff()使用什么方法/算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41759804/