Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用opencv方法时发生编译错误_C++_Opencv_Java Native Interface - Fatal编程技术网

C++ 调用opencv方法时发生编译错误

C++ 调用opencv方法时发生编译错误,c++,opencv,java-native-interface,C++,Opencv,Java Native Interface,我得到了一个OpenCV Mat对象的长地址。初始化对象后,我想调用以下方法 Mat::Mat(const Mat& m, const Range* ranges) 但是我有编译错误。我很久没有做C++了。有人能帮忙吗 代码 void HelloWorld::callBack(jlong addrRgba, float dt) { long lrgba = (long) mRgba; Mat bgraMat = *(Mat*) lrgba; Mat rgbMat = new M

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

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

但是我有编译错误。我很久没有做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
变量。并将指针指向
范围
变量。您可以传递一个
范围
变量的地址<代码>范围
只需存储两个
int
开始
结束
。它是可复制的。
Range
的一个特殊的“静态”值是
all()
返回的内容,以及您可以在
rAll
中复制和传递的内容。您需要检查此工作是否正常,而不仅仅是编译

编辑2:为了理解你所做的事情的含义,我将提出简单的建议:

Mat *rgbMat = new Mat(bgraMat); 

我认为这将是一样的:

Range rAll[2];
rAll[0]= Range::all() ;
rAll[1]= Range::all() ;
Mat *rgbMat = new Mat(bgraMat, rAll); 
正如彼得·伍德所言。 此外,我对以下方面很感兴趣:

long lrgba = (long) mRgba;
Mat bgraMat = *(Mat*) lrgba;
如果mRgba是指向要克隆的Mat的指针,为什么不呢

Mat *rgbMat = new Mat(*mRgba); 

Range::all
返回什么?看起来它是一个
范围
而不是
常量范围*
。根据>“静态方法Range::all()返回一些表示“整个序列”或“整个范围”的特殊变量”,就像Matlab中的“:”或Python中的“…”一样。OpenCV中所有接受范围的方法和函数都支持这个特殊的范围::All()值“错误告诉您认为需要什么函数;您正在传递一个指针和一个值。文档中说你实际上需要一个对象和一个指针确定。我已经尝试了几种不同的方法来解决这个错误,但仍然无法正确处理。你能告诉我在上述代码中需要做哪些更改吗?文档中说
范围
Mat m
的每个维度都有一个范围。在您的情况下,如果
m
不是一维的,您可能会遇到问题。应该是
Mat*rgbMat=new Mat(bgraMat,rAll),而不是
&rAll
Mat *rgbMat = new Mat(*mRgba);