• 大小: 8KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: 其他
  • 标签: OpenCV  SVM  图形识别  

资源简介

本人菜鸟一个,未学习过模式识别、计算机等学科,贻笑大方之处恳请谅解。这是自己学习中利用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.xml
     文件        5024  2017-11-30 15:48  recogshape\src\recogshape\recogshape.cpp
     目录           0  2017-11-30 15:33  recogshape\

评论

共有 条评论