Opencv 如何在JavaCV中使用MatVector 你好,我想写一些相机校准代码,在JavaCV使用MatMatt的时候,我很难用STD::C++中的VEC。p>

Opencv 如何在JavaCV中使用MatVector 你好,我想写一些相机校准代码,在JavaCV使用MatMatt的时候,我很难用STD::C++中的VEC。p>,opencv,vector,javacv,camera-calibration,mat,Opencv,Vector,Javacv,Camera Calibration,Mat,以下是生成图像和对象点的方法: Mat objectPoints = new Mat(allImagePoints.rows(),1,opencv_core.CV_32FC3); float x = 0; float y = 0; for (int h=0;h<patternHeight;h++) { y = h*rectangleSize; for (int w=0;w<patternWidth;w++) {

以下是生成图像和对象点的方法:

Mat objectPoints = new Mat(allImagePoints.rows(),1,opencv_core.CV_32FC3);
    float x = 0;
    float y = 0;
    for (int h=0;h<patternHeight;h++) {
        y = h*rectangleSize;
        for (int w=0;w<patternWidth;w++) {
            x = w*rectangleSize;
            objectPoints.getFloatBuffer().put(3*(patternWidth*h+w), x);
            objectPoints.getFloatBuffer().put(3*(patternWidth*h+w)+1, y);
            objectPoints.getFloatBuffer().put(3*(patternWidth*h+w)+2, 0);
        }
    }
    MatVector allObjectPointsVec = new MatVector(allImagePoints.cols());
    MatVector allImagePointsVec = new MatVector(allImagePoints.cols());
    for (int i=0;i<allImagePoints.cols();i++) {
        allObjectPointsVec.put(i,objectPoints);
        allImagePointsVec.put(i,allImagePoints.col(i));
    }
这看起来像是图像和物体点的长度不一致,但我很确定我做对了。打印MatVector对象将提供

org.bytedeco.javacpp.opencv_core$MatVector[address=0x2237b8a0,position=0,limit=1,capacity=1,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator@4d353a7a]
org.bytedeco.javacpp.opencv_core$MatVector[address=0x2237acd0,position=0,limit=1,capacity=1,deallocator=org.bytedeco.javacpp.Pointer$NativeDeallocator@772f4d0]
这也让我感到困惑,因为我本以为容量应该对应于长度(向量中矩阵的数量)。如果我打印大小字段,我会得到期望值。如果我访问向量中的一个随机元素(例如allObjectPointsVec.get(i))并将其打印为字符串,我将得到以下结果:

AbstractArray[width=1,height=77,depth=32,channels=3] (for object points)
AbstractArray[width=1,height=77,depth=32,channels=2] (for image points)

这就是我所期望的。。。有什么想法吗?对我来说,这似乎是一种错误,也是因为我不明白如果不是向量长度,容量代表什么…

运气好吗?我面临着类似的问题。
AbstractArray[width=1,height=77,depth=32,channels=3] (for object points)
AbstractArray[width=1,height=77,depth=32,channels=2] (for image points)