mwArray和cv::Mat互相转化函数

最近用C++/OpenCV调用MATLAB函数,有必要专门把这两个函数拿出来记录一下。

需要注意的是,Mat2mwArry函数的输入Mat类型是 CV_64FC1,灰度图。

如果要传递多通道图像的话,需要先cv::split()成多个灰度图像分别传给matlab。

 

mwArray2Mat的返回Mat的类型是CV_64FC1,可以通过cv::Mat::convert()转化成所需要的类型。

注:数据类型自己可根据需求更改,也可用模板写。

// Mat2mwArray
mwArray Mat2mwArray(cv::Mat src)
{
	if (src.type() != CV_64FC1);
		src.convertTo(src, CV_64FC1, 1.0, 0);
	mwArray dst(src.rows, src.cols, mxDOUBLE_CLASS); //
	cv::Mat src_t = src.t();
	dst.SetData(src_t.data, src.rows*src.cols); //
	
	return dst;
}


//mwArry2Mat
cv::Mat mwArry2Mat(mwArray src, int rows, int cols)
{
	if (src.IsEmpty()) //
		return cv::Mat();

	cv::Mat dst = cv::Mat::zeros(rows, cols, CV_64FC1);
	for (int j(0); j<rows; ++j)
	{
		double* pdata = dst.ptr<double>(j);
		for (int i(0); i<cols; ++i)
		{
			pdata[i] = src(j + 1, i + 1); /// 元素访问(行号,列号)
		}
	}

	return dst;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值