调用opencv方法时编译错误



我正在获取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: startend。它是可复制的。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); 

相关内容

  • 没有找到相关文章

最新更新