open cv mat怎样将数据类型转化为double
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了open cv mat怎样将数据类型转化为double相关的知识,希望对你有一定的参考价值。
convertTo是可以转换的。下面随机生成了一个1000*1000的0-1 Mat,转换成CV32SC1后,值并没变。 int main()const int w = 1000;Mat u(w, w, CV_8UC1);srand(time(NULL));for(int i=0; i 参考技术A 利用Mat类提供的converTo函数可以变换Mat矩阵的类型存储1. UINT8类型的Mat转换成float类型
Img.convertTo(accImage, CV_32FC1);
//将灰度图像Img转换为float类型的单通道矩阵accImage
2. 将float类型的Mat转成UINT8类型
accImage.convertTo(bg, CV_8SC1);
//结果存在bg中
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; }
以上是关于open cv mat怎样将数据类型转化为double的主要内容,如果未能解决你的问题,请参考以下文章