Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
OpenCV SVM预测不一致?_Opencv - Fatal编程技术网

OpenCV SVM预测不一致?

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,

这里已经提出了这个问题,但仍然没有答案/解决方案。我的问题是:我使用烟雾的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, 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);