zoukankan      html  css  js  c++  java
  • 《得知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




    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    计算机网络 基础 1
    JAVA 基础之 多线程
    HashMap 多线程处理之 FailFast机制:
    Struts2
    JAVA 由浅及深之 Servlet
    Servlet 会话技术 , Session 及 Cookie 详解
    JAVA 设计模式 : 单例模式
    JAVA 基础之 序列化 Serializable
    代理模式 及 实现AOP 拦截机制
    web.xml 文件详解 及 listener、 filter、servlet 加载顺序
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4776341.html
Copyright © 2011-2022 走看看