absdiff
如果摄像机是固定的,那么我们可以认为场景(背景)大多数情况下是不变的,而只有前景(被跟踪的目标)会运动,这样就可以建立背景模型。通过比较当前帧和背景模型,就能轻松地跟踪目标运动情况了。这里,最容易想到的比较方式就是当前帧减去背景模型了。(帧差法)
复制代码
1
2
3void cv::absdiff(InputArray src1, InputArray src2, OutputArray dst )
计算两个数组之间或数组与标量之间的每元素绝对差。
- InputArray src1 第一个输入数组或标量
- InputArray src2 第二个输入数组或标量
- OutputArray dst 与输入数组大小和类型相同的输出数组
复制代码
1
2
3
4
5Mat src0 = (Mat_<uchar>(3, 4) << 2, 5, 3, 4, 5, 6, 9, 8, 9, 10, 10, 12); Mat src1 = (Mat_<uchar>(3, 4) << 1, 2, 3, 4, 3, 12, 8, 8, 9, 6, 9, 3); Mat dst; absdiff(src0, src1, dst);
add
复制代码
1
2
3
4
5void cv::add(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray(), int dtype = -1)
计算两个数组或一个数组和一个标量的每元素和(在opencv中加法是饱和操作,也就是有上限值)
- InputArray src1 第一个输入数组或标量
- InputArray src2 第二个输入数组或标量
- OutputArray dst 与输入数组具有相同大小和通道数的输出数组;深度由dtype或src1/src2定义。
- InputArray mask = noArray() 可选操作掩码—8位单通道数组,用于指定要更改的输出数组的元素
- int dtype = -1 输出数组的可选深度
复制代码
1
2
3
4
5Mat src0 = (Mat_<uchar>(3, 4) << 2, 5, 3, 4, 5, 6, 9, 8, 9, 10, 10, 12); Mat src1 = (Mat_<uchar>(3, 4) << 1, 2, 3, 4, 3, 12, 8, 8, 9, 6, 9, 3); Mat dst; add(src0, src1, dst);
无Mask
复制代码
1
2
3
4
5
6
7
8
9
10
11
12Mat src0 = imread("00.png", IMREAD_COLOR); Mat src1 = imread("01.png", IMREAD_COLOR); imshow("src0", src0); imshow("src1", src1); Mat src2; resize(src0, src2, src1.size()); Mat dst; add(src1, src2, dst); imshow("dst", dst);
Mask
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14Mat src0 = imread("00.png", IMREAD_COLOR); Mat src1 = imread("01.png", IMREAD_COLOR); imshow("src0", src0); imshow("src1", src1); Mat src2; resize(src0, src2, src1.size()); Mat dst; Mat mask(src1.size(), CV_8UC1, Scalar(255)); //掩膜 mask.rowRange(0, src1.rows / 2) = 0; add(src1, src2, dst, mask); imshow("dst", dst);
addWeighted
复制代码
1
2
3
4
5
6
7void cv::addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1)
计算两个数组的加权和
- InputArray src1 第一个输入数组
- double alpha 第一个数组元素的权重
- InputArray src2 与SRC1大小和通道号相同的第二个输入阵列
- double beta 第二数组元素的权重
- double gamma 添加到每个和的标量
- OutputArray dst 与输入数组具有相同大小和通道数的输出数组
- int dtype = -1 输出数组的可选深度;当两个输入数组的深度相同时,可以将dtype设置为-1,这相当于src1.depth()
复制代码
1
2
3
4
5Mat src0 = (Mat_<uchar>(3, 4) << 2, 5, 3, 4, 5, 6, 9, 8, 9, 10, 10, 12); Mat src1 = (Mat_<uchar>(3, 4) << 1, 2, 3, 4, 3, 12, 8, 8, 9, 6, 9, 3); Mat dst; addWeighted(src0, 0.5, src1, 1, 0, dst);
复制代码
1
2
3
4
5
6
7
8
9
10
11
12Mat src0 = imread("00.png", IMREAD_COLOR); Mat src1 = imread("01.png", IMREAD_COLOR); imshow("src0", src0); imshow("src1", src1); Mat src2; resize(src0, src2, src1.size()); Mat dst; addWeighted(src2, 0.5, src1, 0.5, 0, dst); imshow("dst", dst);
最后
以上就是爱笑煎蛋最近收集整理的关于opencv: absdiff/ add/ addWeighted的全部内容,更多相关opencv:内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复