1

我正在尝试使用 CvNormalBayesClassifier 来训练我的程序来学习皮肤像素颜色。我有一组训练图像和响应图像。响应图像为黑白,皮肤区域标记为白色。以下是我的代码,

CvNormalBayesClassifier classifier;
for (int i = 0; i < numFiles; i++) {

    string trainFile = "images/" + int2str(i) + ".jpg";
    string responseFile = "images/" + int2str(i) + "_mask.jpg";

    Mat trainData = imread(trainFile, 1);
    Mat responseData = imread(responseFile, CV_LOAD_IMAGE_GRAYSCALE);

    trainData = trainData.reshape(1, trainData.rows * trainData.cols);
    responseData = responseData.reshape(0, responseData.rows * responseData.cols);

    trainData.convertTo(trainData, CV_32FC1);
    responseData.convertTo(responseData, CV_32FC1);

    classifier.train(trainData, responseData, Mat(), Mat(), i != 0);
}

但是,它给出了以下错误,

The function/feature is not implemented (In the current implementation the new training data must have absolutely the same set of class labels as used in the original training data) in CvNormalBayesClassifier::train

非常感谢。

4

2 回答 2

0

正如错误消息所述,您无法根据新的类标签“更新”分类器。正态贝叶斯分类器学习混合高斯来表示训练数据。如果你突然开始添加新标签,这种混合模型将不再正确,必须从头开始学习新模型。

于 2013-04-08T18:37:20.760 回答
0

好的,我发现问题在于黑白图像已被压缩,因此包含的值范围为 0-255。因此,其他图像中可能会有一个新的类标签。

为了解决这个问题,使用阈值处理使值全部变为 0 或 255。

于 2013-04-09T03:59:08.773 回答