0

我得到一个 OpenCV Mat 对象的地址。初始化对象后,我想调用以下方法

 Mat::Mat(const Mat& m, const Range* ranges)

OpenCV方法链接

但我收到编译错误。好久没做c++了。任何人都可以帮忙吗?

代码

void HelloWorld::callBack(jlong addrRgba, float dt) {

long lrgba = (long) mRgba;
Mat bgraMat = *(Mat*) lrgba;

Mat rgbMat = new Mat(&bgraMat, Range::all());   //cant get this to work
}

错误信息

error: no matching function for call to 'cv::Mat::Mat(cv::Mat*, cv::Range)'
4

1 回答 1

0

你能试试这个吗?

Range rAll = Range::all() ;   
Mat *rgbMat = new Mat(bgraMat, &rAll); 

编辑:PK。很好,它解决了问题。只是为了帮助您理解我为什么提出这个建议:

您想使用构造函数:

 Mat::Mat(const Mat& m, const Range* ranges)

它引用一个Mat变量。您只需传递一个Mat变量。并获取一个指向Range变量的指针。您可以传递一个Range变量的地址。Range只存储两个int:startend. 它是可复制的。一个特殊的“静态”值Rangeall()返回的内容以及您可以复制和传入的内容rAll。您将需要检查此工作是否正确,而不仅仅是编译。

编辑2:试图理解你在做什么的意思,我会提出简单的建议:

Mat *rgbMat = new Mat(bgraMat); 

或者

Mat rgbMat = Mat(bgraMat); 

我认为这将与以下内容相同:

Range rAll[2];
rAll[0]= Range::all() ;
rAll[1]= Range::all() ;
Mat *rgbMat = new Mat(bgraMat, rAll); 

正如@Peter Wood 所说。我也很好奇:

long lrgba = (long) mRgba;
Mat bgraMat = *(Mat*) lrgba;

如果 mRgba 是指向要克隆的 Mat 的指针,为什么不呢?:

Mat *rgbMat = new Mat(*mRgba); 
于 2013-03-11T10:18:46.657 回答