我编写了以下代码来实现 LDA
。在这段代码的末尾,我想通过 将
指针,但即使 eigenvaluesOpenCV
分配给 eigvalue
并将 eigenvectorsOpenCV
分配给 eigvector
>.dataeigenvaluesOpenCV
和 eigenvaluesOpenCV
不是 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;
}
最佳答案
您应该传递 uchar ** 或 uchar &*,您通过复制传递指针,然后修改它们指向的内容。但这并不能转化为函数之外的范围。
关于c++ - 如何在opencv中指向一个垫子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48026732/