博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opecv训练数字 0, 2(简单分类)
阅读量:4299 次
发布时间:2019-05-27

本文共 5605 字,大约阅读时间需要 18 分钟。

#include "stdafx.h"#include 
//#include
//#include
#include
#include
using namespace cv;using namespace std;#define CLASS_NUM 10#define MAT_WEIGHT 16#define MAT_HEIGHT 32#define uchar unsigned charvoid getFeature(Mat &X_train, Mat temp_img, int nIndex){ cvtColor(temp_img, temp_img, CV_BGR2GRAY); //判断图像是否加载成功 if (temp_img.empty()) { cout << "图像加载失败" << endl; return ; } for (size_t i = 0; i < MAT_HEIGHT; i++) { for (size_t j = 0; j < MAT_WEIGHT; j++) { X_train.at
(nIndex, i*MAT_WEIGHT + j) = (float)temp_img.at
(i, j)/255; } } } int main() { int in_layer = 512; int out_layer = 2; int SAMPLES = 10; // 训练样本总量 Mat X_train(SAMPLES, in_layer, CV_32FC1); Mat Y_train(SAMPLES, out_layer, CV_32FC1); // 构建训练数据矩阵 X_train Mat xtrain_0 = imread("data\\0\\1.jpg"); getFeature(X_train, xtrain_0, 0); xtrain_0 = imread("data\\0\\2.jpg"); getFeature(X_train, xtrain_0, 1); xtrain_0 = imread("data\\0\\3.jpg"); getFeature(X_train, xtrain_0, 2); xtrain_0 = imread("data\\0\\4.jpg"); getFeature(X_train, xtrain_0, 3); xtrain_0 = imread("data\\0\\5.jpg"); getFeature(X_train, xtrain_0, 4); Mat xtrain_1 = imread("data\\1\\1.png"); getFeature(X_train, xtrain_1, 5); xtrain_1 = imread("data\\1\\2.png"); getFeature(X_train, xtrain_1, 6); xtrain_1 = imread("data\\1\\3.png"); getFeature(X_train, xtrain_1, 7); xtrain_1 = imread("data\\1\\4.png"); getFeature(X_train, xtrain_1, 8); xtrain_1 = imread("data\\1\\5.png"); getFeature(X_train, xtrain_1, 9); //string strPath = "data\\0\\"; //for (int i = 0; i < 21; i++) //{ // string strPicPath = strPath + to_string(i) + ".jpg"; // Mat mat = imread(strPicPath); // getFeature(X_train, mat,i); //} // 构建训练标签矩阵 Y_train for (int i = 0; i < SAMPLES; i++) { Y_train.at
(i, 0) = 1; Y_train.at
(i, 1) = 0; if (i > SAMPLES / 2 || i == SAMPLES / 2) { Y_train.at
(i, 0) = 0; Y_train.at
(i, 1) = 1; } } CvANN_MLP_TrainParams params( cvTermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 300, 0.000001), CvANN_MLP_TrainParams::BACKPROP, 0.1, 0.1); int n_W = MAT_WEIGHT * MAT_HEIGHT; Mat layers = (Mat_
(3, 1) << n_W, 24, 2); CvANN_MLP net(layers, CvANN_MLP::SIGMOID_SYM, 0.6667f, 1.7159f); net.train(X_train, Y_train, Mat(), Mat(), params); net.save("net.xml"); int numTest = 3; Mat X_test(numTest, in_layer, CV_32FC1); Mat Y_test(numTest, out_layer, CV_32FC1); Mat testImg0 = imread("data\\0\\6.jpg"); cvtColor(testImg0, testImg0, CV_BGR2GRAY); Mat testImg1 = imread("data\\1\\6.png"); cvtColor(testImg1, testImg1, CV_BGR2GRAY); Mat testImg2 = imread("data\\1\\7.png"); cvtColor(testImg2, testImg2, CV_BGR2GRAY); for (size_t i = 0; i < MAT_HEIGHT; i++) { for (size_t j = 0; j < MAT_WEIGHT; j++) { X_test.at
(0, i*MAT_WEIGHT + j) = (float)testImg0.at
(i, j) / 255; X_test.at
(1, i*MAT_WEIGHT + j) = (float)testImg1.at
(i, j) / 255; X_test.at
(2, i*MAT_WEIGHT + j) = (float)testImg2.at
(i, j) / 255; } } Mat predictions(Y_test.size(), CV_32F); net.predict(X_test, predictions); cout << predictions << endl; return 0;}

 

最后得到的分类结果还不错:

 

上面用的训练样本比较少,每类只有5张图片,下面采用21张图片的:

 

#include "stdafx.h"#include 
//#include
//#include
#include
#include
using namespace cv;using namespace std;#define CLASS_NUM 10#define MAT_WEIGHT 16#define MAT_HEIGHT 32#define uchar unsigned charvoid getFeature(Mat &X_train, Mat temp_img, int nIndex){ cvtColor(temp_img, temp_img, CV_BGR2GRAY); //判断图像是否加载成功 if (temp_img.empty()) { cout << "图像加载失败" << endl; return ; } for (size_t i = 0; i < MAT_HEIGHT; i++) { for (size_t j = 0; j < MAT_WEIGHT; j++) { X_train.at
(nIndex, i*MAT_WEIGHT + j) = (float)temp_img.at
(i, j)/255; } } } int main() { int in_layer = 512; int out_layer = 2; int SAMPLES_0 = 21; int SAMPLES_2 = 21; int SAMPLES = SAMPLES_0 + SAMPLES_2; // 训练样本总量 Mat X_train(SAMPLES, in_layer, CV_32FC1); Mat Y_train(SAMPLES, out_layer, CV_32FC1); // 构建训练数据矩阵 X_train string strPath = "data\\0\\"; for (int i = 0; i < 21; i++) { string strPicPath = strPath + to_string(i+1) + ".jpg"; Mat mat = imread(strPicPath); getFeature(X_train, mat,i); } strPath = "data\\1\\"; for (int i = 0; i < SAMPLES_2; i++) { string strPicPath = strPath + to_string(i + 1) + ".png"; Mat mat = imread(strPicPath); getFeature(X_train, mat, i + SAMPLES_0); } // 构建训练标签矩阵 Y_train for (int i = 0; i < SAMPLES; i++) { if (i < SAMPLES_0) { Y_train.at
(i, 0) = 1; Y_train.at
(i, 1) = 0; } if (i > SAMPLES_0 || SAMPLES_0 == i) { Y_train.at
(i, 0) = 0; Y_train.at
(i, 1) = 1; } } CvANN_MLP_TrainParams params( cvTermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 300, 0.000001), CvANN_MLP_TrainParams::BACKPROP, 0.1, 0.1); int n_W = MAT_WEIGHT * MAT_HEIGHT; Mat layers = (Mat_
(3, 1) << n_W, 24, 2); CvANN_MLP net(layers, CvANN_MLP::SIGMOID_SYM, 0.6667f, 1.7159f); net.train(X_train, Y_train, Mat(), Mat(), params); net.save("net.xml"); int numTest = 3; Mat X_test(numTest, in_layer, CV_32FC1); Mat Y_test(numTest, out_layer, CV_32FC1); Mat testImg0 = imread("data\\0\\6.jpg"); cvtColor(testImg0, testImg0, CV_BGR2GRAY); Mat testImg1 = imread("data\\1\\6.png"); cvtColor(testImg1, testImg1, CV_BGR2GRAY); Mat testImg2 = imread("data\\1\\7.png"); cvtColor(testImg2, testImg2, CV_BGR2GRAY); for (size_t i = 0; i < MAT_HEIGHT; i++) { for (size_t j = 0; j < MAT_WEIGHT; j++) { X_test.at
(0, i*MAT_WEIGHT + j) = (float)testImg0.at
(i, j) / 255; X_test.at
(1, i*MAT_WEIGHT + j) = (float)testImg1.at
(i, j) / 255; X_test.at
(2, i*MAT_WEIGHT + j) = (float)testImg2.at
(i, j) / 255; } } Mat predictions(Y_test.size(), CV_32F); net.predict(X_test, predictions); cout << predictions << endl; return 0;}

 

 

转载地址:http://nlsws.baihongyu.com/

你可能感兴趣的文章
五步git操作搞定Github中fork的项目与原作者同步
查看>>
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>
python multiprocessing遇到Can’t pickle instancemethod问题
查看>>
APP真机测试及发布
查看>>
iOS学习之 plist文件的读写
查看>>
通知机制 (Notifications)
查看>>
10 Things You Need To Know About Cocoa Auto Layout
查看>>
C指针声明解读之左右法则
查看>>
一个异步网络请求的坑:关于NSURLConnection和NSRunLoopCommonModes
查看>>
iOS 如何放大按钮点击热区
查看>>
ios设备唯一标识获取策略
查看>>
获取推送通知的DeviceToken
查看>>
Could not find a storyboard named 'Main' in bundle NSBundle
查看>>
CocoaPods安装和使用教程
查看>>
Beginning Auto Layout Tutorial
查看>>
block使用小结、在arc中使用block、如何防止循环引用
查看>>
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>