Matrix OpenCV 3.1 UMat分配

Matrix OpenCV 3.1 UMat分配,matrix,opencv3.1,Matrix,Opencv3.1,我正在尝试对我公司的项目进行性能升级。该项目依赖于OpenCV,最近我成功升级到OpenCV 3.1以使用UMat。虽然我找不到一个完整的教程,除了基本的操作。因此,我陷入了以下困境: Mat m (width, height, type, someData, step); cv::UMat * ptr = new cv::UMat (width, height, type); //dont ask me why the hell we are using a pointer to the sm

我正在尝试对我公司的项目进行性能升级。该项目依赖于OpenCV,最近我成功升级到OpenCV 3.1以使用UMat。虽然我找不到一个完整的教程,除了基本的操作。因此,我陷入了以下困境:

Mat m (width, height, type, someData, step);
cv::UMat * ptr = new cv::UMat (width, height, type);
//dont ask me why the hell we are using a pointer to the smart mat object (my project leader insists)
这不管用

ptr->setTo (m);
这也不是:

m.copyTo(*ptr);
这些导致了一个例外

ptr=&m.getUMat(cv::ACCESS_RW);
这个结果是一个0行0列的二维矩阵。。。
我需要帮助。提前感谢

我认为你最好像这样初始化你的
cv::UMat

cv::UMat* ptr = new cv::UMat(m.getUMat(cv::ACCESS_READ));
std::cout << "ptr = " << std::endl << ptr->getMat(cv::ACCESS_RW) << std::endl;
cv::UMat*ptr=new cv::UMat(m.getUMat(cv::ACCESS_READ));
std::cout
cv::setTo()
用于将Mat对象设置为标量,而不是用于将数据从Mat复制到UMat,我相信您正在尝试这样做

m.copyTo(*ptr)
对我来说很好:

int width=2;
int height=width;
int someData [4] {1,2,3,4};
int type=CV_32S;

cv::Mat m (width, height, type, someData, width*sizeof(int));
cv::UMat * ptr = new cv::UMat (width, height, type);
cv::UMat out;

m.copyTo(*ptr);

cv::multiply(*ptr,*ptr, out);

out.copyTo(m);

std::cout<<m<<std::endl; // [1, 4; 9, 16]
*ptr=m.getUMat(cv::ACCESS_RW);