jovahe 2016-01-21 01:07 采纳率: 0%
浏览 6040
已结题

opencv svm predict输出结果不对?

请教各位大侠:
我在使用opencv3.0的SVM进行图像分类时,训练样本为图像的灰度值(float型,最小0,最大255,均值2.0),
当灰度大于3.0时,lables设为1.0,小于3.0时,设置为-1.0;随便选了一种核函数进行训练,
然后再拿原图作为测试样本,结果在“response = svm->predict(sampleMat);”结果怎么不是1或-1,而是很大的一个负数(-1082130432.000);对原图每个像素进行训练都是这个负数,请各位大侠赐教!!!十分感激!!!
主体代码如下:
Mat trainImg = Mat(width*height, 1, CV_32FC1, img_org);//把图像安装width*height行1列的方式存进trainImg

float *labels = new float[width*height];
memset(labels, 0, sizeof(float)*width*height);
for (int j = 0; j < height; j++){
    for (int i = 0; i < width; i++){
        if (img_org[j*width + i]>3.0)
            labels[j*width + i] = 1.0;
        else
            labels[j*width + i] = -1.0;
    }
}
Mat labelsMat = Mat(width*height, 1, CV_32SC1, labels);

Ptr<ml::SVM> svm = ml::SVM::create();
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::LINEAR);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, (int)1e7, 1e-6));;//终止准则函数:当迭代次数达到最大值时终止  

// 训练
svm->train(trainImg, ml::ROW_SAMPLE, labelsMat);// 
    Mat image = Mat::zeros(width, height, CV_8UC3);// 之前一直弄成CV_32SC1格式了,呵呵

Vec3b green(0, 255, 0), blue(255, 0, 0);

for (int j = 0; j < image.rows; j++){
    for (int i = 0; i < image.cols; i++){
        float temp = img_org[j*width + i];
        Mat sampleMat = Mat(1, 1, CV_32FC1, temp);
        float response = 0;
        response = svm->predict(sampleMat);// ??? 结果怎么不是1或-1,而是很大的一个负数,用openCV行不通?
        if (abs(response-1.0)<0.0001)
             image.at<Vec3b>(j, i) = green;         
        else if (abs(response + 1.0)<0.0001)
            image.at<Vec3b>(j, i) = blue;
    }
}

    imwrite("result.png", image);

 delete[]img_org;
  • 写回答

7条回答

  • devmiao 2016-01-21 17:51
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值