我正在获取OpenCV Mat对象的地址。初始化对象后,我想调用以下方法
Mat::Mat(const Mat& m, const Range* ranges)
但是我收到了编译错误。我很久没有完成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)'
答案 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
只需存储两个int
:start
和end
。它是可以复制的。 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);