資源簡介
opencv3.1用SVM實現MNIST,可讀取自己的圖片,用Windows畫板黑底白字,保存在測試項目路徑下即可識別手寫字
代碼片段和文件信息
#include?
#include?
#include?“opencv2/imgcodecs.hpp“
#include?
#include?
#include?
using?namespace?cv;
using?namespace?cv::ml;
using?namespace?std;
//大端轉小端
int?reverseInt(int?i);
void?main()
{
//讀取測試樣本集
ifstream?if_testImags(“t10k-images-idx3-ubyte“?ios::binary);
//讀取失敗
if?(true?==?if_testImags.fail())
{
cout?<“Please?check?the?path?of?file?t10k-images-idx3-ubyte“?< return;
}
int?magic_num?testImgsNum?nrows?ncols;
//讀取magic?number
if_testImags.read((char*)&magic_num?sizeof(magic_num));
magic_num?=?reverseInt(magic_num);
cout?<“測試圖像數據庫t10k-images-idx3-ubyte的magic?number為:“?< //讀取測試圖像總數
if_testImags.read((char*)&testImgsNum?sizeof(testImgsNum));
testImgsNum?=?reverseInt(testImgsNum);
cout?<“測試圖像數據庫t10k-images-idx3-ubyte的圖像總數為:“?< //讀取圖像的行大小
if_testImags.read((char*)&nrows?sizeof(nrows));
nrows?=?reverseInt(nrows);
cout?<“測試圖像數據庫t10k-images-idx3-ubyte的圖像維度row為:“?< //讀取圖像的列大小
if_testImags.read((char*)&ncols?sizeof(ncols));
ncols?=?reverseInt(ncols);
cout?<“測試圖像數據庫t10k-images-idx3-ubyte的圖像維度col為:“?<
//讀取測試圖像
int?imgVectorLen?=?nrows?*?ncols;
Mat?testFeatures?=?Mat::zeros(testImgsNum?imgVectorLen?CV_32FC1);
Mat?temp?=?Mat::zeros(nrows?ncols?CV_8UC1);
for?(int?i?=?0;?i? {
if_testImags.read((char*)temp.data?imgVectorLen);
Mat?tempFloat;
//由于SVM需要的測試數據格式是CV_32FC1,在這里進行轉換
temp.convertTo(tempFloat?CV_32FC1);
memcpy(testFeatures.data?+?i*imgVectorLen?*?sizeof(float)?tempFloat.data?imgVectorLen?*?sizeof(float));
}
//歸一化
testFeatures?=?testFeatures?/?255;
//讀取測試圖像對應的分類標簽
ifstream?if_testLabels(“t10k-labels-idx1-ubyte“?ios::binary);
//讀取失敗
if?(true?==?if_testLabels.fail())
{
cout?<“Please?check?the?path?of?file?t10k-labels-idx1-ubyte“?< return;
}
int?magic_num_2?testLblsNum;
//讀取magic?number
if_testLabels.read((char*)&magic_num_2?sizeof(magic_num_2));
magic_num_2?=?reverseInt(magic_num_2);
cout?<“測試圖像標簽數據庫t10k-labels-idx1-ubyte的magic?number為:“?< //讀取測試圖像的分類標簽的數量
if_testLabels.read((char*)&testLblsNum?sizeof(testLblsNum));
testLblsNum?=?reverseInt(testLblsNum);
cout?<“測試圖像標簽數據庫t10k-labels-idx1-ubyte的標簽總數為:“?<
//由于SVM需要輸入的標簽類型是CV_32SC1,在這里進行轉換
Mat?testLabels?=?Mat::zeros(testLblsNum?1?CV_32SC1);
Mat?readLabels?=?Mat::zeros(testLblsNum?1?CV_8UC1);
if_testLabels.read((char*)readLabels.data?testLblsNum?*?sizeof(char));
readLabels.convertTo(testLabels?CV_32SC1);
//載入訓練好的SVM模型
Ptr?svm?=?SVM::load(“mnist.xml“);
int?sum?=?0;
//對每一個測試圖像進行SVM分類預測
for?(int?i?=?0;?i? {
Mat?predict_mat?=?Mat::zeros(1?imgVectorLen?CV_32FC1);
memcpy(predict_mat.data?testFeatures.data?+?i*imgVectorLen?*?sizeof(float)?im
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.?????31744??2018-05-08?14:35??SVM_MNIST\.vs\SVM_MNIST\v14\.suo
?????文件???????3190??2018-05-07?20:49??SVM_MNIST\svmtest\2.bmp
?????文件???????1862??2018-05-07?20:49??SVM_MNIST\svmtest\7.bmp
?????文件???31409497??2018-05-08?09:54??SVM_MNIST\svmtest\mnist.xm
?????文件???????5783??2018-05-08?14:24??SVM_MNIST\svmtest\svmtest.vcxproj
?????文件????????950??2018-05-08?14:09??SVM_MNIST\svmtest\svmtest.vcxproj.filters
?????文件????7840016??2018-05-04?23:16??SVM_MNIST\svmtest\t10k-images-idx3-ubyte
?????文件??????10008??2018-05-04?23:16??SVM_MNIST\svmtest\t10k-labels-idx1-ubyte
?????文件???47040016??2018-05-04?23:16??SVM_MNIST\svmtest\train-images-idx3-ubyte
?????文件??????60008??2018-05-04?23:16??SVM_MNIST\svmtest\train-labels-idx1-ubyte
?????文件???????6008??2018-05-08?14:20??SVM_MNIST\svmtest\traintest.cpp
?????文件???????1145??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\svmtest.log
?????文件????????586??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\svmtest.tlog\CL.command.1.tlog
?????文件??????20094??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\svmtest.tlog\CL.read.1.tlog
?????文件????????552??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\svmtest.tlog\CL.write.1.tlog
?????文件???????1260??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\svmtest.tlog\li
?????文件???????3268??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\svmtest.tlog\li
?????文件????????528??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\svmtest.tlog\li
?????文件????????204??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\svmtest.tlog\svmtest.lastbuildstate
?????文件?????480379??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\traintest.obj
?????文件?????535552??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\vc140.idb
?????文件?????815104??2018-05-08?14:24??SVM_MNIST\svmtest\x64\Debug\vc140.pdb
?????文件???31409497??2018-05-08?14:23??SVM_MNIST\SVM_MNIST\mnist.xm
?????文件???????3149??2018-05-08?14:03??SVM_MNIST\SVM_MNIST\svmtrain.cpp
?????文件???????5784??2018-05-08?13:35??SVM_MNIST\SVM_MNIST\SVM_MNIST.vcxproj
?????文件????????949??2018-05-08?13:35??SVM_MNIST\SVM_MNIST\SVM_MNIST.vcxproj.filters
?????文件????7840016??2018-05-04?23:16??SVM_MNIST\SVM_MNIST\t10k-images-idx3-ubyte
?????文件??????10008??2018-05-04?23:16??SVM_MNIST\SVM_MNIST\t10k-labels-idx1-ubyte
?????文件???47040016??2018-05-04?23:16??SVM_MNIST\SVM_MNIST\train-images-idx3-ubyte
?????文件??????60008??2018-05-04?23:16??SVM_MNIST\SVM_MNIST\train-labels-idx1-ubyte
............此處省略37個文件信息
評論
共有 條評論