OpenCV:复数矩阵相乘

在VS2017中,利用Mat矩阵实现复数矩阵相乘。

在此,Mat矩阵为双通道浮点数据(CV_32FC2),通道1存放复数的实部,通道2存放复数的虚部。

复数矩阵点乘

复数点乘原理:a=x1+y1i,b=x2+y2;a*b=(x1*x2-y1*y2)+(x1*y2+x2*y1)i

//对复数矩阵进行分离为实数矩阵和虚数矩阵
void matSplit(Mat &src, Mat &dst_real, Mat &dst_img)
{
	Mat planes[2];
	split(src, planes);
	dst_real = planes[0];//实部
	dst_img = planes[1];//虚部

	
}

//对两个复数矩阵进行相乘运算
bool matDotMultiply(Mat src1, Mat src2, Mat dst)
{
	//得到矩阵src1的行数 列数
	int row1 = src1.rows;
	int col1 = src1.cols;

	//得到矩阵src2的行数 列数
	int row2 = src2.rows;
	int col2 = src2.cols;

	//得到矩阵dst的行数 列数
	int row_d = dst.rows;
	int col_d = dst.cols;

	//判断是是否满足矩阵相乘的条件
	if (col1 != row2 || row1 != row_d || col2 != col_d)
	{
		return false;
	}

	//src1_real(x1),src1_imag(y1),src2_real(x2),src2_imag(y2)
	Mat src1_real, src1_imag, src2_real, src2_imag;

	//初始化结果存放矩阵
	Mat channel[2] = { Mat::zeros(Size(col_d,row_d), CV_32FC1) ,Mat::zeros(Size(col_d, row_d), CV_32FC1) };

	//将输入复数Mat数据拆分成虚
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值