我有一系列移动相机的帧。框架已经稳定。我想计算每两个后续帧之间的帧差异。我是用
做的diff = abs(frame1 - frame2);
框架是Mat对象。然而,这两个帧将具有不重叠的区域(即,两个帧的两个像素值中的一个将等于0),我不想包括这些区域。
如果两个像素值为a (= 0)
和b (!= 0)
,则abs()
将为| b |,但如果两个像素中的一个为0,我希望将值设为0。 / p>
编辑: 我想这样做而不会在像素上循环
答案 0 :(得分:0)
好的,我明白了。基本上,我们对两个帧A
和B
进行阈值处理,将它们转换为二进制图像(threshold
值= 0,THRESH_BINARY
模式),然后是两个二进制图像是AND,并且该结果与差异帧进行AND运算以获得最终结果。
cv::Mat frameDifference(cv::Mat A, cv::Mat B)
{
cv::Mat diff = cv::abs(A - B),
binaryA,
binaryB,
binaryAND;
cv::threshold(A, binaryA, 0, 256, cv::ThresholdTypes::THRESH_BINARY);
cv::threshold(B, binaryB, 0, 256, cv::ThresholdTypes::THRESH_BINARY);
cv::bitwise_and(binaryA, binaryB, binaryAND);
cv::bitwise_and(diff, binaryAND, diff);
return diff;
}