opencv 学习之 SVM / ANN 图片分类(OPENCV3.2)
来源:互联网 发布:全球数据化时代txt 编辑:程序博客网 时间:2024/06/05 05:23
#include <string>#include <iostream>#include <vector> #include <opencv2/core.hpp>#include <opencv2/imgproc.hpp>#include "opencv2/imgcodecs.hpp"#include <opencv2/highgui.hpp>#include <opencv2/ml.hpp>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;using namespace cv::ml;int SVM_TEST(){//训练2组数据,每组4帧int labels[8] = { -1, -1, -1, -1, 1, 1, 1, 1 };Mat labelsMat(8, 1, CV_32SC1, labels);//样本宽高int smpW = 540;int smpH = 360;//将样本的值逐像素赋给训练图像Mat trainMat(8, smpW * smpH, CV_32FC1);for (int i = 0; i < 2; i++){for (int j = 1; j < 5; j++){string path = format("E:\\video\\tmp\\Img\\%d%d.bmp", i, j);Mat img = imread(path, 0);//Canny(img, img, 50, 100);int index1 = i * 4 + j - 1;float * trainData = trainMat.ptr<float>(index1);for (int h = 0; h < smpH; h++){uchar * imgData = img.ptr<uchar>(h);for (int w = 0; w < smpW; w++){int index2 = h*smpW + w;trainData[index2] = imgData[w];}}}}//Ptr<SVM> svm = SVM::create();//svm->setType(SVM::C_SVC);//svm->setKernel(SVM::LINEAR);//svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));////设置训练数据 //Ptr<TrainData> tData = TrainData::create(trainMat, ROW_SAMPLE, labelsMat);//svm->train(tData);//svm->save("d:\\data.xml");Ptr<SVM> svm = SVM::load("d:\\data.xml");for (int i = 0; i < 2; i++){for (int j = 5; j < 6; j++){Mat testMat(1, smpW * smpH, CV_32FC1);float * testData = testMat.ptr<float>(0);string path = format("E:\\video\\tmp\\Img\\%d%d.bmp", i, j);Mat img = imread(path, 0);//Canny(img, img, 50, 100);for (int h = 0; h < smpH; h++){uchar * imgData = img.ptr<uchar>(h);for (int w = 0; w < smpW; w++){int index2 = h*smpW + w;testData[index2] = imgData[w] * 1.0;}}Mat ret(1, 1, CV_32S);float response = svm->predict(testMat, ret); //进行预测,返回1或-1cout << response << endl;float * data = ret.ptr<float>(0);cout << data[0] << endl;waitKey(10);}}return 0;}int ANN_TEST(){// 540 x 360 矩阵int smpW = 540;int smpH = 360;float labels[8] = { 0,0,0,0,1,1,1,1 }; // 每个样本数据对应的输出Mat labelsMat(8, 1, CV_32FC1, labels);cout << labelsMat << endl;// 训练样本Mat trainMat(8, smpW * smpH, CV_32FC1);for (int i = 0; i < 2; i++){for (int j = 1; j < 5; j++){string path = format("E:\\video\\tmp\\Img\\%d%d.bmp", i, j);Mat img = imread(path, 0);if (img.empty()){return 0;}//Canny(img, img, 50, 100);int index1 = i * 4 + j - 1;float * trainData = trainMat.ptr<float>(index1);for (int h = 0; h < smpH; h++){uchar * imgData = img.ptr<uchar>(h);for (int w = 0; w < smpW; w++){int index2 = h*smpW + w;trainData[index2] = imgData[w];}}}}//// BP 模型创建和参数设置//Ptr<ANN_MLP> bp = ANN_MLP::create();//Mat layerSizes = (Mat_<int>(1, 3) << smpW * smpH, 6, 1);//bp->setLayerSizes(layerSizes);//bp->setTrainMethod(ANN_MLP::BACKPROP, 0.1, 0.1);//bp->setActivationFunction(ANN_MLP::SIGMOID_SYM);//bp->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 10000, /*FLT_EPSILON*/1e-6));//// 保存训练好的神经网络参数//bool trained = bp->train(trainMat, ROW_SAMPLE, labelsMat);//if (trained) //{//bp->save("d:\\bp_param.xml");//}// 创建训练好的神经网络Ptr<ANN_MLP> bp = ANN_MLP::load("d:\\bp_param.xml");for (int i = 0; i < 2; i++){for (int j = 5; j < 6; j++){Mat testMat(1, smpW * smpH, CV_32FC1);float * testData = testMat.ptr<float>(0);string path = format("E:\\video\\tmp\\Img\\%d%d.bmp", i, j);Mat img = imread(path, 0);//Canny(img, img, 50, 100);for (int h = 0; h < smpH; h++){uchar * imgData = img.ptr<uchar>(h);for (int w = 0; w < smpW; w++){int index2 = h*smpW + w;testData[index2] = imgData[w] * 1.0;}}Mat responseMat;bp->predict(testMat, responseMat);float response = responseMat.ptr<float>(0)[0];cout << response << endl;float * data = responseMat.ptr<float>(0);cout << data[0] << endl;waitKey(10);}}waitKey(0);return 0;}int main(){SVM_TEST();ANN_TEST();}
VS2017 + OPENCV3.2
用法与 OPENCV2 有较大差异。另外,特征文件载入时与 OPENCV2 差异最大,需要直接载入,不再先创建再载入。否则报内存错误。
阅读全文
0 0
- opencv 学习之 SVM / ANN 图片分类(OPENCV3.2)
- 机器学习之-利用svm(支持向量机)分类(opencv3)
- 【opencv、机器学习】opencv中的SVM图像分类(一)
- 【opencv、机器学习】opencv中的SVM图像分类(二)
- OpenCV3.2 HOG+SVM进行物体分类
- 【OpenCV学习笔记】【教程翻译】四(车牌检测之SVM分类)
- 基于qt和opencv3实现机器学习之:利用svm(支持向量机)分类
- OpenCV学习:HOG+SVM物体分类
- 【OpenCV学习笔记 015】SVM图像分类
- 分类器之SVM学习
- 机器学习之SVM分类
- 机器学习(2)-SVM分类算法
- 神经网络ANN分类器及OpenCV实现
- 神经网络 ANN 分类器 OpenCV实现 例子
- SVM多分类器的实现(Opencv3,C++)
- 数据挖掘学习------------------4-分类方法-4-神经网络(ANN)
- opencv中的SVM图像分类(一)
- opencv中的SVM图像分类(二)
- oracle权限
- 列车车厢重排 思维过程正确性
- unity对象池的使用
- Swift:Optional可选类型
- 《UNIX环境高级编程》笔记11--umask函数
- opencv 学习之 SVM / ANN 图片分类(OPENCV3.2)
- mysql RPM 安装的卸载方式
- GitChat · 安全 | 揭秘我国的电子取证技术
- Java 二叉树的四种递归与非递归遍历
- Ribbon负载均衡机制(搭配eureka)
- mybatis联合查询遇到相同字段解决办法
- 【大数据部落】(数据挖掘)如何用大数据做用户异常行为分析
- 类和接口的定义
- 由H5游戏谈起,H5开发具有哪些优势?