mwArray和cv::Mat轉化函數 20170812
阿新 • • 發佈:2017-08-12
row 是否 mat return i+1 emp brush assert split
不是新東西了,但是有必要專門把這兩個函數拿出來記錄一下。
需要註意的是,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