Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用cv::ml::StatModel::train以使用KNN时出现Opencv错误_C++_Opencv_Computer Vision_Knn - Fatal编程技术网

C++ 使用cv::ml::StatModel::train以使用KNN时出现Opencv错误

C++ 使用cv::ml::StatModel::train以使用KNN时出现Opencv错误,c++,opencv,computer-vision,knn,C++,Opencv,Computer Vision,Knn,问题1: 我试图用Visual Studio 2017和C++实现OpenCV 3.4中的KNN。到目前为止,我已经能够解决我的问题,但昨天我遇到了以下错误: “非静态成员引用必须相对于特定对象” int main(int argc,const char*argv[]{ ReadData(“smokeDataBase.yml”,0);//14烟雾 ReadData(“forestDataBase.yml”,1);//14森林 ReadData(“skyDataBase.yml”,2);//12天

问题1:

我试图用Visual Studio 2017和C++实现OpenCV 3.4中的KNN。到目前为止,我已经能够解决我的问题,但昨天我遇到了以下错误: “非静态成员引用必须相对于特定对象”

int main(int argc,const char*argv[]{
ReadData(“smokeDataBase.yml”,0);//14烟雾
ReadData(“forestDataBase.yml”,1);//14森林
ReadData(“skyDataBase.yml”,2);//12天空
ReadData(“testDataBase.yml”,3);

Mat trainClasses=(Mat_u40;40,1)这是你的第一个问题: 这是功能序列的签名,如中所述

正如您所看到的,该方法是虚拟的,这意味着您不能以这种方式调用它!。该函数应该由StatModel的子类实现。因此,当您想要使用该方法时,可以从实现该方法的子类调用该方法。类KNearest实现了该方法。您的代码应该更改为:

Ptr<ml::KNearest> knn = ml::KNearest::create();  
knn->train(trainData, ml::ROW_SAMPLE , trainClasses);
Ptr knn=ml::KNearest::create();
knn->列车(列车数据,ml::行样本,列车类别);
现在回答第二个问题:

您可以将数据准备为行样本或列样本。 在ROW_SAMPLE中,每个示例都在一行中。因此,如果您的示例由三个浮点数组成,并且您有10个示例,那么您应该得到一个具有10行3列的Mat对象。
在COL_示例中,所有内容都是颠倒的。因此,您将得到3行10列。

这非常有效。这是我第一次遇到虚拟方法。非常感谢您的快速响应。@CarlosHernandezPerez如果这对您有帮助,您应该接受它。
virtual bool cv::ml::StatModel::train   (   InputArray      samples,
        int     layout,
        InputArray      responses 
    )   
Ptr<ml::KNearest> knn = ml::KNearest::create();  
knn->train(trainData, ml::ROW_SAMPLE , trainClasses);