我是靠谱客的博主 爱笑煎蛋,最近开发中收集的这篇文章主要介绍opencv: absdiff/ add/ addWeighted,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 absdiff

如果摄像机是固定的,那么我们可以认为场景(背景)大多数情况下是不变的,而只有前景(被跟踪的目标)会运动,这样就可以建立背景模型。通过比较当前帧和背景模型,就能轻松地跟踪目标运动情况了。这里,最容易想到的比较方式就是当前帧减去背景模型了。(帧差法) 

void cv::absdiff(InputArray src1,
InputArray src2,
OutputArray dst )	

计算两个数组之间或数组与标量之间的每元素绝对差。

  • InputArray src1 第一个输入数组或标量
  • InputArray src2 第二个输入数组或标量
  • OutputArray dst 与输入数组大小和类型相同的输出数组
Mat 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

void 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  输出数组的可选深度
Mat 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

Mat 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 

Mat 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

void 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()
Mat 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);

Mat 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: absdiff/ add/ addWeighted所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部