zoukankan      html  css  js  c++  java
  • 数字识别(测试)

     1 #include <windows.h>
     2 #include <iostream>
     3 #include <opencv2/opencv.hpp>
     4 
     5 using namespace cv;
     6 using namespace std;
     7 
     8 char* WcharToChar(const wchar_t* wp)
     9 {
    10     char *m_char;
    11     int len = WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), NULL, 0, NULL, NULL);
    12     m_char = new char[len + 1];
    13     WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), m_char, len, NULL, NULL);
    14     m_char[len] = '';
    15     return m_char;
    16 }
    17 
    18 wchar_t* CharToWchar(const char* c)
    19 {
    20     wchar_t *m_wchar;
    21     int len = MultiByteToWideChar(CP_ACP, 0, c, strlen(c), NULL, 0);
    22     m_wchar = new wchar_t[len + 1];
    23     MultiByteToWideChar(CP_ACP, 0, c, strlen(c), m_wchar, len);
    24     m_wchar[len] = '';
    25     return m_wchar;
    26 }
    27 
    28 wchar_t* StringToWchar(const string& s)
    29 {
    30     const char* p = s.c_str();
    31     return CharToWchar(p);
    32 }
    33 
    34 int main()
    35 {
    36     const string fileform = "*.png";
    37     const string perfileReadPath = "charSamples";
    38 
    39     const int sample_mun_perclass = 20;//训练字符每类数量
    40     const int class_mun = 10;//训练字符类数
    41 
    42     const int image_cols = 8;
    43     const int image_rows = 16;
    44     string  fileReadName,
    45         fileReadPath;
    46     char temp[256];
    47 
    48     CvANN_MLP bp;
    49     bp.load("bpcharModel.yml");
    50 
    51     //测试神经网络
    52     cout << "测试:" << endl;
    53     Mat test_image = imread("2.png", CV_LOAD_IMAGE_GRAYSCALE);
    54     Mat test_temp;
    55     //使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现
    56     resize(test_image, test_temp, Size(image_cols, image_rows), (0, 0), (0, 0), CV_INTER_AREA);
    57     threshold(test_temp, test_temp, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
    58     Mat_<float>sampleMat(1, image_rows*image_cols);
    59     for (int i = 0; i<image_rows*image_cols; ++i)
    60     {
    61         sampleMat.at<float>(0, i) = (float)test_temp.at<uchar>(i / 8, i % 8);
    62     }
    63 
    64     Mat responseMat;
    65     bp.predict(sampleMat, responseMat);
    66     Point maxLoc;
    67     double maxVal = 0;
    68     minMaxLoc(responseMat, NULL, &maxVal, NULL, &maxLoc);
    69     cout << "识别结果:" << maxLoc.x << "    相似度:" << maxVal * 100 << "%" << endl;
    70     imshow("test_image", test_image);
    71     waitKey(0);
    72 
    73     return 0;
    74 }
  • 相关阅读:
    spring
    C++容器常用方法简单总结
    【转】shell中各种括号的作用详解()、(())、[]、[[]]、{}
    c++创建对象时一些小细节
    ros建模与仿真(urdf介绍)
    常用vi命令
    Linux零零碎碎的小知识
    Linux目录都是些什么
    关于c/c++指针,指针的指针
    关于c/c++中的二维数组与指针
  • 原文地址:https://www.cnblogs.com/hsy1941/p/8257758.html
Copyright © 2011-2022 走看看