基于C++的opencv中Mat矩阵运算方法总结



前言

Mat类是目前opencv最为常用的图像数据格式,其优点在于无需手动开辟内存空间和实时释放,针对此类的各种运算方法有很多,本文按照各种运算方法的种类进行简单的总结和示例。


一、Mat运算种类

将Mat的运算简单的分为以下几种:

1.1 代数运算

    Mat imageadd = image1 + image2;
	//imshow("加法", imageadd);

	Mat imageadd1;
	Mat imageadd2;
	add(image1, image2, imageadd1);
	add(image1, 2, imageadd2);//函数重载
	//imshow("加法", imageadd);

	Mat imagesub = image1 - image2;//运算符重载
	//imshow("减法", imagesub);

	Mat imageAbsdiff;
	absdiff(image1, image2, imageAbsdiff);
	//imshow("减法绝对值", imageAbsdiff);

	Mat imagesub1;
	subtract(image1, image2, imagesub1);
	//imshow("减法", imagesub);

	Mat imageweighted;
	addWeighted(image1, 0.5, image2, 0.2, 50, imageweighted);
	//imshow("加权", imageweighted);

	Mat imagemultiply;
	multiply(image1, image2, imagemultiply, 1.0, CV_32FC1);
	//imshow("点乘", imagemultiply);

	Mat imagedivide;
	divide(image1, image2, imagedivide, 1.0, -1);
	//imshow("点除", imagedivide);

	//非
	Mat image2not;
	Mat mask = Mat::zeros(image2.size(), CV_8UC1);

	mask(Rect(200, 100, 200, 200)) = 255;

	bitwise_not(image2, image2not, mask);
	//imshow("非", image2not);

	//或
	Mat image2or;
	bitwise_or(image2, imagesub, image2or, mask);
	//imshow("或", image2or);
	
    //异或
	Mat image2xor;
	bitwise_xor(image2, imageadd2, image2xor, mask);
	imshow("异或", image2xor);

	//与
	Mat image2and;
	bitwise_and(image2, imagesub, image2and, mask);
	//imshow("与", image2and);

1.2 类型转换

    //---------------------数组和Mat------------------------
	int height = image.rows;
	int width = image.cols;

	//转16位一维数组
	uint8_t* array1 = new uint8_t[height * width * 3];
	for (int i = 0; i < height; i++)
	{
		for (int j = 0; j < width; j++)
		{
			for (int k = 0; k < 3; k++)
			{
				array1[i * width * 3 + j * 3 + k] = image.at<cv::Vec3b>(i, j)[k];
			}		
		}
	}

	Mat image3(height, width, CV_8UC3, array1);

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值