OpenCV SVM预测不一致?
这里已经提出了这个问题,但仍然没有答案/解决方案。我的问题是:我使用烟雾的RGB直方图分布(在8个箱子中-因此M=24),训练了一个用于烟雾检测的SVM(带有RBF核):OpenCV SVM预测不一致?,opencv,Opencv,这里已经提出了这个问题,但仍然没有答案/解决方案。我的问题是:我使用烟雾的RGB直方图分布(在8个箱子中-因此M=24),训练了一个用于烟雾检测的SVM(带有RBF核): cv::Mat labelsMat = cv::Mat(N, 1, CV_32SC1); for (int i = 0; i < N; i++) { labelsMat.at<int>(i, 0) = labels[i]; } cv::Mat trainingDataMat = cv::Mat(N,
cv::Mat labelsMat = cv::Mat(N, 1, CV_32SC1);
for (int i = 0; i < N; i++)
{
labelsMat.at<int>(i, 0) = labels[i];
}
cv::Mat trainingDataMat = cv::Mat(N, M, CV_32FC1);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
trainingDataMat.at<float>(i, j) = histogramData[i][j];
}
}
// Create the SVM
cv::Ptr<ml::SVM> svm = ml::SVM::create();
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::RBF);
svm->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, 1000, 1e-8));
// Train the SVM
svm->trainAuto(trainingDataMat, ml::ROW_SAMPLE, labelsMat);
svm->save(SVMFileName);
我继续进行烟雾探测;在这种情况下,要确定帧中检测到的每个水滴是否为烟雾,请执行以下操作:
for (int i = 0; i < 8; i++)
histogramData.at<float>(0, i) = Rhist[i];
for (int i = 8; i < 16; i++)
histogramData.at<float>(0, i) = Ghist[i];
for (int i = 16; i < 24; i++)
histogramData.at<float>(0, i) = Bhist[i];
float response = svm->predict(histogramData);
for(int i=0;i<8;i++)
(0,i)=Rhist[i];
对于(int i=8;i<16;i++)
(0,i)=Ghist[i];
对于(int i=16;i<24;i++)
(0,i)处的Historogramdata.at=bHistorogramdata[i];
浮动响应=支持向量机->预测(HistorogramData);
发生检测(真/假阳性)的帧将保存,并带有帧号。当我在同一视频上多次运行此操作时,每次都会产生不同的结果(帧号)(blob检测总是产生相同的blob)。关于检测,有时(大多数情况下)会检测到烟雾,但在某些情况下不会检测到相同的烟雾(相同的视频)
有人知道怎么解决这个问题吗?或者这仍然是OpenCV SVM中的一个已知问题?刚刚意识到我在代码中的愚蠢错误:用于形成预测数据的Ghist和Bhist索引完全不正确,因此不一致
for (int i = 0; i < 8; i++)
histogramData.at<float>(0, i) = Rhist[i];
for (int i = 8; i < 16; i++)
histogramData.at<float>(0, i) = Ghist[i];
for (int i = 16; i < 24; i++)
histogramData.at<float>(0, i) = Bhist[i];
float response = svm->predict(histogramData);