mwArray和cv::Mat转化函数 20170812

Posted 路边的十元钱硬币

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mwArray和cv::Mat转化函数 20170812相关的知识,希望对你有一定的参考价值。

不是新东西了,但是有必要专门把这两个函数拿出来记录一下。

 

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

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

 

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

 

mwArray Mat2mwArray(cv::Mat src)
{
    CV_Assert(src.type() == CV_8UC1);

    mwArray dst(src.rows, src.cols, mxUINT8_CLASS); /// 初始化,可以理解成矩阵
    cv::Mat src_t = src.t();
    dst.SetData(src_t.data, src.rows*src.cols); /// 赋值

    return dst;
}

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;    
}

  

 

以上是关于mwArray和cv::Mat转化函数 20170812的主要内容,如果未能解决你的问题,请参考以下文章

cv::mat与unsigned char*相互转化之间的转换

编写接受 cv::Mat 或 cv::UMat 类型输入的模板函数

如何使用模板函数从缓冲区(T* 数据数组)创建 cv::Mat?

如何将 cv::mat 对象从 python 模块传递给 c++ 函数并返回返回的 cv::mat 类型的对象?

c++“cv::Mat::row”: 函数调用缺少参数列表;请使用“&cv::Mat::row”创建指向成员的指针?

OpenCV2:总结篇 cv::Mat