调用opencv方法时编译错误

时间:2013-03-11 09:36:58

标签: c++ opencv java-native-interface

我正在获取OpenCV Mat对象的地址。初始化对象后,我想调用以下方法

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

OpenCV method link

但是我收到了编译错误。我很久没有完成c ++了。有人可以帮忙吗?

CODE

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 MSG

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

1 个答案:

答案 0 :(得分: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只需存储两个intstartend。它是可以复制的。 Range的一个特殊“静态”值是all()返回的内容以及您可以复制并传入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);