OpenCV图像运算处理

OpenCV图像运算处理

opencv图像运算的一些函数的介绍

特别注意:下面的函数,参与运算的图片的数据类型,大小,通道数目都必须相同,才可以进行运算。

算术运算

一:加法函数:add()

CV_EXPORTS_W void add(InputArray src1, InputArray src2, OutputArray dst,
                      InputArray mask = noArray(), int dtype = -1);

/*****************************************************************************************************************************************/

参数1 :第一张输入图

参数2 :第二张输入图

参数3 :输出图

参数4 :遮罩像素(可有可无)

参数5 : 输出图的深度(可有可无)

/*****************************************************************************************************************************************/

二:减法运算:subtract();

CV_EXPORTS_W void subtract(InputArray src1, InputArray src2, OutputArray dst,
                           InputArray mask = noArray(), int dtype = -1);

/*****************************************************************************************************************************************/

参数1 :第一张输入图

参数2 :第二张输入图

参数3 :输出图

参数4 :遮罩像素(可有可无)

参数5 : 输出图的深度(可有可无)

/*****************************************************************************************************************************************/

三:乘法运算:multiplay();

CV_EXPORTS_W void multiply(InputArray src1, InputArray src2,
                           OutputArray dst, double scale = 1, int dtype = -1);

/*****************************************************************************************************************************************/

参数1 :第一张输入图

参数2 :第二张输入图

参数3 :输出图

参数4 :缩放因子,在第一张图*第二张图的基础上再乘以缩放因子

参数5 : 输出图的深度(可有可无)

/*****************************************************************************************************************************************/

四:除法运算:divide();

CV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst,
                         double scale = 1, int dtype = -1);

/*****************************************************************************************************************************************/

参数1 :第一张输入图

参数2 :第二张输入图

参数3 :输出图

参数4 :缩放因子,在第一张图*第二张图的基础上再乘以缩放因子

参数5 : 输出图的深度(可有可无)

/*****************************************************************************************************************************************/

五:混合运算:addWeighted();

CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2,
                              double beta, double gamma, OutputArray dst, int dtype = -1);

/*****************************************************************************************************************************************/

按照公式进行:dst=alpha* img1+beta* img2+gamma;

参数1 :第一张输入图

参数2 :输入图1占比 (alpha)

参数3 :第二张输入图

参数4 :输入图2占比 (beta)

参数5 :附加值(gamma)

参数6 :输出图

参数7 : 输出图的深度(可有可无)

/*****************************************************************************************************************************************/

位运算

一:按位与:bitwise_and();

CV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2,
                              OutputArray dst, InputArray mask = noArray());

/*****************************************************************************************************************************************/

参数1 :第一张输入图

参数2 :第二张输入图

参数3 :输出图

参数4 :遮罩像素,可有可无

/*****************************************************************************************************************************************/

二:按位或: bitwise_or();

CV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2,
                             OutputArray dst, InputArray mask = noArray());

/*****************************************************************************************************************************************/

参数1 :第一张输入图

参数2 :第二张输入图

参数3 :输出图

参数4 :遮罩像素,可有可无

/*****************************************************************************************************************************************/

三:非运算:bitwise_not();

CV_EXPORTS_W void bitwise_not(InputArray src, OutputArray dst,
                              InputArray mask = noArray());

/*****************************************************************************************************************************************/

参数1 :输入图

参数3 :输出图

参数4 :遮罩像素,可有可无

/*****************************************************************************************************************************************/

四:异或运算:bitwise_xor();

V_EXPORTS_W void bitwise_xor(InputArray src1, InputArray src2,
                              OutputArray dst, InputArray mask = noArray());

/*****************************************************************************************************************************************/

参数1 :第一张输入图

参数2 :第二张输入图

参数3 :输出图

参数4 :遮罩像素,可有可无

/*****************************************************************************************************************************************/

算术运用代码如下

#include
#include
using namespace std;
using namespace cv;
class ImgOpreations
{
public:
	//超过255,用原来的颜色进行保持
	ImgOpreations():img1(imread("1.bmp")),img2(imread("2.bmp")) 
	{
		result = Mat::zeros(img1.size(),img2.type());//初始化存储两个图片运算的结果
	}
	void Add(string WName="Add")
	{
		add(img1,img2,result);//相加
		imshow(WName,result);
		waitKey(0);
	}
	void Sub(string WName="Sub")
	{
		subtract(img1,img2,result);//相减
		imshow(WName,result);
		waitKey(0);
	}
	void Mul(string WName = "Mul") 
	{
		multiply(img1,img2,result,1);//相乘
		imshow(WName,result);
		waitKey(0);
	}
	void Div(string WName = "Div")
	{
		divide(img1,img2,result,1);//相除
		imshow(WName, result);
		waitKey(0);
	}
	void AddWeighted(string WName="AddW")
	{
		addWeighted(img1,0.5,img2,0.5,0,result);//混合运算
		imshow(WName,result);
		waitKey(0);
	}
private:
protected:
	Mat img1;
	Mat img2;
	Mat result;
};
int main() 
{
	ImgOpreations* test1 = new ImgOpreations;
	test1->Add();
	test1->Sub();
	test1->Mul();
	test1->Div();
	test1->AddWeighted();
    delete test1;
    return 0;
}

位运算代码如下

#include
#include
using namespace std;
using namespace cv;
class BitWise 
{
public:
	BitWise():img1(imread("1.bmp")),img2(imread("2.bmp"))
	{
		result = Mat::zeros(img1.size(),img2.type());
	}
	void And(string WName="And")//按位与
	{
		bitwise_and(img1,img2,result);
		imshow(WName,result);
		waitKey(0);
	}
	void Or(string WName = "Or")//按位或
	{
		bitwise_or(img1, img2, result);
		imshow(WName, result);
		waitKey(0);
	}
	void Not(string WName = "Not")//非运算
	{
		bitwise_not(img1,result);
		imshow(WName+"1", result);
		waitKey(0);
		bitwise_not(img2, result);
		imshow(WName+"2", result);
		waitKey(0);
	}
	void Xor(string WName = "Xor")//异或运算
	{
		bitwise_xor(img1, img2, result);
		imshow(WName, result);
		waitKey(0);
	}
private:
	Mat img1;
	Mat img2;
	Mat result;
protected:
};
int main() 
{
	BitWise* test2 = new BitWise;
	test2->And();
	test2->Not();
	test2->Or();
	test2->Xor();
	delete test2;
    return 0;
}

你可能感兴趣的:(opencv,计算机视觉,python)