Opencv 将CvMat 8转换为CvMat

Opencv 将CvMat 8转换为CvMat,opencv,Opencv,有没有办法将CvMat*转换为CvMat?我被困在一个地方的代码中,我必须使用cvCloneMat()克隆一个CvMat。这给了我CvMat*我需要它作为CvMat的地方 我试过去参考的方法,但不知怎么的,它不起作用。我正在写一个jitter/max external,它有一个图像矩阵作为输入,一个矩阵作为输出。这是一段代码 //Convert input and output matrices to OpenCV matrices cvJitter2CvMat(in_matri

有没有办法将CvMat*转换为CvMat?我被困在一个地方的代码中,我必须使用cvCloneMat()克隆一个CvMat。这给了我CvMat*我需要它作为CvMat的地方

我试过去参考的方法,但不知怎么的,它不起作用。我正在写一个jitter/max external,它有一个图像矩阵作为输入,一个矩阵作为输出。这是一段代码

    //Convert input and output matrices to OpenCV matrices
    cvJitter2CvMat(in_matrix, &source);
    cvJitter2CvMat(out_matrix, &edges);

    //Calculate threshold values
    thresh1 = x->threshold - x->range;
    thresh2 = x->threshold + x->range;
    CLIP(thresh1,0,255);
    CLIP(thresh2,0,255);



    //calculate
    //cvCanny( &source, &edges, thresh1, thresh2, 3 );
    tempo = cvCloneMat(&source);
    edges = (*tempo);   
} else {
    return JIT_ERR_INVALID_PTR;
}
输出: jit_对象_方法(out_矩阵,gensym(“锁定”),out_savelock); jit对象方法(在矩阵中,gensym(“锁”),在保存锁中); 返回错误; }


问题是,当我使用“cvCanny()”而不是cvCloneMat()时,它可以工作。输出显示为视频流的边缘。但是如果我使用cvCloneMat(),它会显示一个空白图像。

这适用于任何与指针相关的内容:

CvMat* pMat = cvCloneMat(...);
CvMat mat = (*pMat);
functionThatNeedsMat(*pMat);
otherFunctionThatNeedsMat(mat);

还请检查这篇关于

边的文章,它声明为CvMat,而不是CvMat*。将“节奏”标题复制到边缘(但不复制图像数据)。这是错误的。因为在temp超出范围后,没有人知道会发生什么。我看到了更多的CvMat init,没有发布。仔细阅读OpenCV文档,寻找关于指针和内存使用的好教程。接受我的忠告,开始学习C/C++,然后转到OpenCV。没有基本原理,你就不能继续。当你想回到图像处理的时候,我的建议是使用C++接口。使用Mat,而不是CvMat。