c++ - 如何在opencv中指向一个垫子?

标签 c++ opencv eigen

我编写了以下代码来实现 LDA。在这段代码的末尾,我想通过 eigenvaluesOpenCV 分配给 eigvalue 并将 eigenvectorsOpenCV 分配给 eigvector >.data 指针,但即使 eigenvaluesOpenCVeigenvaluesOpenCV 不是 NULLeigvectoreigvalue 变为 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/

相关文章:

c++ -::new 是什么意思?

opencv - 如何在CUDA文件(.cu)中包含和使用OpenCv3.1.0库?

C++ Eigen Vector 在编译时推断类的 vector 大小

c++ - 如何将 Eigen 矩阵和 vector 类型转换为 Apple 的 simd 类型以传递给 GPU?

c++ - 使用Eigen::Transpose <const Matrix3>的正确方法?

c++ - 在 pthread 中使用共享变量

c++如何将名称传递给基类的构造函数

c# - 为什么 C# 没有 C++ 风格的静态库?

python - 为什么PIL与Pytorch经常使用?

opencv - 在 OpenCV 中寻找小轮廓