我正在获取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)'
你能试试吗?
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
。您需要检查此工作是否正确,而不仅仅是编译。
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);