矩阵和图像的操作
(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