資源簡介
本人菜鳥一個,未學習過模式識別、計算機等學科,貽笑大方之處懇請諒解。這是自己學習中利用OpenCV,通過SVM識別圖像中圖形鏈碼,完成圖形識別的小程序,特分享一下。

代碼片段和文件信息
//C++標準輸入輸出庫
#include??
#include?
//OpenCV2標準頭文件
#include?
#include?
#include?
#include?
#include?
#include?
using?namespace?std;
using?namespace?cv;
int?main()
{
????//?step?1:
???//訓練數據的分類標記,即3類
????float?labels[7]?=?{1.01.01.0?-1.0?-1.0-1.02.0};
????CvMat?labelsMat?=?cvMat(7?1?CV_32FC1?labels);
????//訓練數據矩陣
//ps:可以自己添加不規則的鏈碼進行訓練
????float?trainingData[7][80]?=?{?{0000707767666656554544443433232222121101}//圓形鏈碼
??????????????????????????????????{5444555656666677700000010122122223224334}//圓形鏈碼
??????????????????????????????????{4444343323222212110100007077676666565545}//圓形鏈碼
??????????????????????????????????{0000000000666666666644444444442222222222}//正方形鏈碼
??????????????????????????????????{6666666666000000000000222222222444444444}//正方形鏈碼
??????????????????????????????????{0000000000000666666644444444444442222222}//正方形鏈碼
??????????????????????????????????{6556566,5655656656556566565565660000000000000000000000000000000000003232232332322}//三角形
??????????????????????????????????};
????CvMat?trainingDataMat?=?cvMat(7?80?CV_32FC1?trainingData);
????//?step?2:
????//訓練參數設定
????CvSVMParams?params;
????params.svm_type?=?CvSVM::C_SVC;?????????????????//SVM類型
????params.kernel_type?=?CvSVM::LINEAR;?????????????//核函數的類型
????//SVM訓練過程的終止條件?max_iter:最大迭代次數??epsilon:結果的精確性
????params.term_crit?=?cvTermCriteria(CV_TERMCRIT_ITER?1000000?FLT_EPSILON);
????//params.term_crit?=?cvTermCriteria(CV_TERMCRIT_EPS?1000000?FLT_EPSILON);
????//?step?3:
????//啟動訓練過程
????CvSVM?SVM;
????SVM.train(?&trainingDataMat?&labelsMat?NULL?NULL?params);
????//?huo?qu?te?zheng?miao?hui?zi
????Mat?imageSource=imread(“/home/*******/******.bmp“0);//讀取圖片,變成單通道。
????Mat?image;
????GaussianBlur(imageSourceimageSize(33)0);
????Canny(imageimage100250);
????CvMat?_srcimage?=?image;
????CvMemStorage*?storage?=?cvCreateMemStorage();//采用默認大小,即:0.
????CvSeq*?first_contour?=?NULL;
????int?Nc?=?cvFindContours(&_srcimagestorage&first_contoursizeof(CvContour)
????????????????????????????????CV_RETR_CCOMP
????????????????????????????????CV_CHAIN_CODE///*這個是關鍵參數*/
????????????????????????????????cvPoint(0?0)
???????????????????????????);
????CvChain*?chain?=?0;
????vector?c1;
????CvSeq*?h;
????for(?CvSeq*?c?=?first_contour;?c?!=?NULL;c?=?c->h_next)
????{
????????int?ContourCount?=?0;
????????int?total?=?c->total;
????????float?DataBuffer[80];
????????int?Step?=?2;
????????if?(total?>?40)?{
????????????Step?=?total/80;
????????}
????????else?Step?=?1;
????????if(total<20)
????????????c?=
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-11-30?15:33??recogshape\src\
?????目錄???????????0??2017-11-30?15:33??recogshape\src\recogshape\
?????文件????????7130??2017-11-24?20:56??recogshape\src\recogshape\CMakeLists.txt
?????文件????????6737??2017-11-24?20:50??recogshape\src\recogshape\CMakeLists.txt~
?????文件????????1903??2017-11-24?20:50??recogshape\src\recogshape\package.xm
?????文件????????5024??2017-11-30?15:48??recogshape\src\recogshape\recogshape.cpp
?????目錄???????????0??2017-11-30?15:33??recogshape\
- 上一篇:整理的停用詞庫
- 下一篇:opencv_calib3d310d.dll
評論
共有 條評論