《学习opencv》笔记——矩阵和图像操作——cvAdd、cvAddS and cvAddWeighted

矩阵和图像的操作

(1)cvAdd函数

其结构

void cvAdd(//图像加和
	const CvArr* src1,//第一个原矩阵
	const CvArr* src2,//第二个原矩阵
	CvArr* dst,       //存放矩阵
	const CvArr* mask = NULL:  //控制点
);

就是单纯的将两个图像加和,mask变量控制加和的元素点,相当于“开关的作用”;

程序实例

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main(int argc, char** argv)
{
	IplImage *src1, *src2,*src3;
	src1=cvLoadImage("1.jpg");
	src2=cvLoadImage("3.jpg");
	src3=cvLoadImage("4.jpg");
	cvAdd(src1,src2,src2);
	cvShowImage( "测试1", src1);
	cvShowImage( "测试2", src2);
	cvShowImage( "测试3", src3);
	cvWaitKey();
	return 0;
}

输出结果:

(2)cvAddS函数

其结构

void cvAddS(//图像加常量
	const CvArr* src1,//第一个原矩阵
	CvScalar value,    //加和常量
	CvArr* dst,       //存放矩阵
	const CvArr* mask = NULL:  //控制点
);

这个函数是在图像上加上一个value其他和cvAdd一样,其中value是一个cvScalar量所以他的四个变量分别对应RGB空间。

程序实例

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main(int argc, char** argv)
{
	IplImage *src1, *src2,*src3;
	src1=cvLoadImage("1.jpg");
	src2=cvLoadImage("1.jpg");
	src3=cvLoadImage("1.jpg");
	CvScalar cs;
	cs.val[2] = 16.0;
	cvAddS(src1,cs,src2);
	cs.val[1] = 16.0;
	cvAddS(src1,cs,src3);
	cvShowImage( "测试1", src1);
	cvShowImage( "测试2", src2);
	cvShowImage( "测试3", src3);
	cvWaitKey();
	return 0;
}

输出结果:

(3)cvAddWeighted函数

其结构

void cvAddWeighted(  //图像融合
	const CvArr* src1,//第一个原矩阵.
	double alpha,//第一个矩阵元素的权值
	const CvArr* src2,//第二个原矩阵.
	double beta,//第二个矩阵元素的权值
	double gamma,//添加的常数项。
	CvArr* dst //输出矩阵
);

这个函数是一个公式加和,公式为:dst = src1*alpha + src2*beta + gamma,所以两个权值的和尽量大于零小于一。

实例程序

#include <cv.h>
#include <highgui.h>
#include <stdio.h>

int main(int argc, char** argv)
{
	IplImage *src1, *src2;
	src1=cvLoadImage("1.jpg");
	src2=cvLoadImage("2.jpg");
	int x = 100;
	int y = 170;
	int width = 230;
	int height = 200;
	double alpha = 0.2;
	double beta  = 0.9;
	cvSetImageROI(src1, cvRect(x,y,width,height));
	cvSetImageROI(src2, cvRect(x,y-20,width,height));
	cvAddWeighted(src1, alpha, src2, beta,0.0,src1);
	cvResetImageROI(src1);
	cvNamedWindow( "Alpha_blend", 1 );
	cvShowImage( "测试", src1 );
	cvWaitKey();
	return 0;
}

输出结果

to be continued

《学习opencv》笔记——矩阵和图像操作——cvAdd、cvAddS and cvAddWeighted

时间: 2024-12-25 02:35:46

《学习opencv》笔记——矩阵和图像操作——cvAdd、cvAddS and cvAddWeighted的相关文章

《学习opencv》笔记——矩阵和图像操作——cvOr,cvOrS,cvrReduce,cvRepeat,cvScale,cvSet and cvSetZero

矩阵和图像的操作 (1)cvOr函数 其结构 void cvOr(//两个矩阵对应元素做或运行 const CvArr* src1,//矩阵1 const CvArr* src2,//矩阵2 CvArr* dst,//结果矩阵 const CvArr* mask = NULL//矩阵"开关" ); 实例代码 #include <cv.h> #include <highgui.h> #include <stdio.h> int main(int arg

《学习opencv》笔记——矩阵和图像操作——cvGEMM,cvGetCol,cvGetCols and cvGetDiag

矩阵和图像的操作 (1)cvGEMM函数 其结构 double cvGEMM(//矩阵的广义乘法运算 const CvArr* src1,//乘数矩阵 const CvArr* src2,//乘数矩阵 double alpha,//1号矩阵系数 const CvArr* src3,//加权矩阵 double beta,//2号矩阵系数 CvArr* dst,//结果矩阵 int tABC = 0//变换标记 ); tABC变换标记及其对应的含义 CV_GEMM_A_T 转置 src1 CV_GE

《学习opencv》笔记——矩阵和图像操作——cvDet,cvDit,cvDotProduct,cvEigenVV and cvFlip

矩阵和图像的操作 (1)cvDet函数 其结构 double cvDet(//计算矩阵的行列式 const CvArr* mat ); 实例代码 #include <cv.h> #include <highgui.h> #include <stdio.h> #include <iostream> using namespace std; int main() { double va[] = {1,0,0,0,2,0,0,0,3}; CvMat Va=cvMa

《学习opencv》笔记——矩阵和图像操作——cvSetIdentity,cvSolve,cvSplit,cvSub,cvSubS and cvSubRS

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

《学习opencv》笔记——矩阵和图像操作——cvCrossProduct and cvCvtColor

矩阵和图像的操作 (1)cvCrossProduct函数 其结构 void cvCrossProdust(//计算两个三维向量的叉积 const CvArr* src1, const CvArr* src2, CvArr* dst ); 实例代码 #include <cv.h> #include <highgui.h> #include <stdio.h> #include <iostream> using namespace std; int main()

《学习opencv》笔记——矩阵和图像操作——cvCalcCovarMatrix,cvCmp and cvCmpS

矩阵和图像的操作 (1)cvCalcCovarMatrix函数 其结构 void cvCalcCovarMatrix(计算给定点的均值和协方差矩阵 const CvArr** vects,//给定向量 int count,//给定向量的组数 CvArr* cov_mat,//结果矩阵 CvArr* avg,//根据flag得到结果 int flags//标记位 ); 标记位参数值极其意义 标志参数的具体标志值 意义 CV_COVAR_NORMAL 计算均值和协方差 CV_COVAR__SCRAM

《学习opencv》笔记——矩阵和图像操作——cvSum,cvSVD,cvSVBkSb,cvTrace,cvTranspose,cvXor,cvXorS and cvZero

矩阵和图像的操作 (1)cvSum函数 其结构 CvScalar cvSum(//计算arr各通道所有像素总和 CvArr* arr//目标矩阵 ); 实例代码 #include <cv.h> #include <highgui.h> #include <stdio.h> #include <iostream> using namespace std; int main() { IplImage *src1,*dst1,*dst2,*dst3,*dst4;

《学习opencv》笔记——矩阵和图像操作——cvAnd、cvAndS、cvAvg and cvAvgSdv

矩阵和图像的操作 (1)cvAnd函数 其结构 void cvAnd( //将src1和src2按像素点取"位与运算" const CvArr* src1,//第一个矩阵 const CvArr* src2,//第二个矩阵 CvArr* dst,//结果矩阵 const CvArr* mask = NULL;//矩阵经行像素点与的"开关" ); 程序实例 #include <cv.h> #include <highgui.h> #includ

《学习opencv》笔记——矩阵和图像操作——cvMinManLoc,cvMul,cvNot,cvNorm and cvNormalize

矩阵和图像的操作 (1)cvMinManLoc函数 其结构 void cvMinMaxLoc(//取出矩阵中最大最小值 const CvArr* arr,//目标矩阵 double* min_val,//最小值 double* max_val,//最大值 CvPoint* min_loc = NULL,//最小值位置 CvPoint* max_loc = NULL,//最大值位置 const CvArr* mask = NULL//矩阵"开关" ); 实例代码 #include <