将 OpenCV 2 中的ANN_MLP代码转换为 OpenCV 3 代码

Convert ANN_MLP code in OpenCV 2 to OpenCV 3 code

本文关键字:代码 OpenCV 转换 MLP 中的 ANN      更新时间:2023-10-16

我在OpenCV 2中的代码是:

ann.create(layers, CvANN_MLP::SIGMOID_SYM, 1, 1);

如何将其转换为OpenCV 3?当我将CvANN_MLP转换为cv::ml::ANN_MPL.收到错误:

字段类型 'cv::ml::ANN_MLP' 是一个抽象类

知道吗?谢谢。

举个例子,如果你要导入前面提到的常用导入:

using namespace cv;
using namespace ml;
using namespace std;

Ptr<ANN_MLP> mlp = ANN_MLP::create();
Mat layersSize = Mat(3, 1, CV_16U);
layersSize.row(0) = Scalar(inputTrainingData.cols);
layersSize.row(1) = Scalar(hiddenLayerSize);
layersSize.row(2) = Scalar(outputTrainingData.cols);
mlp->setLayerSizes(layersSize);
mlp->setActivationFunction(ANN_MLP::ActivationFunctions::SIGMOID_SYM);
TermCriteria termCrit = TermCriteria(
TermCriteria::Type::COUNT + TermCriteria::Type::EPS,
100000000,
0.000000000000000001
);
mlp->setTermCriteria(termCrit);
mlp->setTrainMethod(ANN_MLP::TrainingMethods::BACKPROP);
Ptr<TrainData> trainingData = TrainData::create(
inputTrainingData,
SampleTypes::ROW_SAMPLE,
outputTrainingData
);
mlp->train(trainingData);

您可能需要查看官方文档以获取更多详细信息。

正在转换一些 opencv2 代码遇到了这个问题,这可能会有所帮助

#include<opencv2/ml.hpp>
Ptr<ml::ANN_MLP> ann = ml::ANN_MLP::create();
Mat layers(1,3,CV_32SC1);
layers.at<int>(0)= TrainData.cols;
layers.at<int>(1)= nlayers;
layers.at<int>(2)= numCharacters;
ann->setActivationFunction(ml::ANN_MLP::SIGMOID_SYM, 1,1);
ann->setLayerSizes(layers);

OpenCV 2 代码是:

#include<ml.h>
CvANN_MLP  ann;
Mat layers(1,3,CV_32SC1);
layers.at<int>(0)= TrainData.cols;
layers.at<int>(1)= nlayers;
layers.at<int>(2)= numCharacters;
ann.create(layers, CvANN_MLP::SIGMOID_SYM, 1, 1);