C++ 如何在opencv中指向垫子?

C++ 如何在opencv中指向垫子?,c++,opencv,eigen,C++,Opencv,Eigen,我编写了以下代码来实现LDA。在这段代码的末尾,我想通过将eignaturesopencv分配给eigvalue和eignaturevectorsopencv分配给eigvector。数据指针,但即使eignaturesopencv和eignaturesopencv不是NULL,eigvector和eigvalue变为NULL。为什么会发生这种情况以及如何解决 void main() { . . . uchar* EVectors = NULL; uchar* EValues =

我编写了以下代码来实现
LDA
。在这段代码的末尾,我想通过
eignaturesopencv
分配给
eigvalue
eignaturevectorsopencv
分配给
eigvector
。数据
指针,但即使
eignaturesopencv
eignaturesopencv
不是
NULL
eigvector
eigvalue
变为
NULL
。为什么会发生这种情况以及如何解决

void main()
{
.
.
.
    uchar* EVectors = NULL;
    uchar* EValues = NULL;
    MYLDA(train_labels, train_data, EVectors, EValues);
.
.
.
}


void MYLDA(vector<int> gnd, Mat_<float> _data, uchar* eigvector, uchar* eigvalue)
{
    .
    .
    .
GeneralizedEigenSolver<MatrixXf> ges;

ges.compute(DPrime, WPrime);

MatrixXcf eigenvectorsInEigen = ges.eigenvectors();

VectorXcf eigenvaluesInEigen = ges.eigenvalues();

Mat eigenvectorsOpenCV(eigenvectorsInEigen.rows(), 
eigenvectorsInEigen.cols(), CV_32FC1, eigenvectorsInEigen.data());

uchar* mPtr = new uchar[eigenvectorsOpenCV.total()];

memcpy(mPtr, eigenvectorsOpenCV.data, eigenvectorsOpenCV.total());

eigvector = mPtr;

Mat eigenvaluesOpenCV(eigenvaluesInEigen.rows(), 
eigenvaluesInEigen.cols(), CV_32FC1, eigenvaluesInEigen.data());

uchar* nPtr = new uchar[eigenvaluesOpenCV.total()];

memcpy(mPtr, eigenvaluesOpenCV.data, eigenvaluesOpenCV.total());

eigvalue = nPtr;

}
void main()
{
.
.
.
uchar*EVectors=NULL;
uchar*EValues=NULL;
MYLDA(列车标签、列车数据、电子元件、评估值);
.
.
.
}
void MYLDA(矢量gnd、材料数据、uchar*eigvector、uchar*eigvalue)
{
.
.
.
广义代根索尔弗;
ges.compute(DPrime,WPrime);
矩阵xCf特征向量Sineigen=ges.特征向量();
向量xcf特征值sineigen=ges.特征值();
Mat EIGNVECTORSOPENCV(EIGNVECTORSINEIGEN.rows(),
特征向量sineigen.cols(),CV_32FC1,特征向量sineigen.data();
uchar*mPtr=new-uchar[eigenvectorsOpenCV.total();
memcpy(mPtr,eignvectorsopencv.data,eignvectorsopencv.total());
eigvector=mPtr;
Mat FEATURESSOPENCV(FEATURESSINEIGEN.rows(),
特征值sineigen.cols(),CV_32FC1,特征值sineigen.data();
uchar*nPtr=新的uchar[featuresopencv.total()];
memcpy(mPtr,indighersopencv.data,indighersopencv.total());
eigvalue=nPtr;
}

您应该传递uchar**或uchar&*,您通过复制传递指针,然后修改它们指向的内容。但这并不能转化为函数之外的作用域。

请记住,
特征向量sopencv
包含
浮动
,每个浮动为32位(即4字节)。现在你的代码> MeMcPy<代码>只有1/4的数据。PosiTip:如果你在C++中使用<代码> MeMCPY < /C>,你可能做得不对。