• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: C/C++
  • 标签: Opencv  C++  

资源简介

基于Opencv的简单数字识别,适用于初学者入门,有助于开拓初学者的思维,帮助其更好地入门,代码详细,有很多注释,简单易懂!

资源截图

代码片段和文件信息

#include 
#include
#include 
#include 

using namespace std;
using namespace cv;

//创建记录轮廓数量和坐标的结构体
struct num_contours
{
double x y;             //轮廓的x、y坐标
int index;               //轮廓的顺序

bool operator <(num_contours &m)
{
if (y > m.y+50) return false;

else if (y > m.y-50)
{
if (x < m.x) return true;

else return false;
}

else return true;
}
}num_contours[100];

//创建记录结果的结构体
struct result
{
double data;
int num;

bool operator<(result &m)
{
if (data < m.data)return true;
else return false;
}
}result[100];

void select_result(Mat & src int num);
double compare(Mat &src Mat &model);
vector imread_model();
void deal(Mat &src Mat &model int m);
void select_result(Mat & src int num);

int main()
{
Mat src gray_src dest dst;
src = imread(“C:/Users/86159/Desktop/num_text/num_text_02.png“);           //加载原图

cvtColor(src gray_src COLOR_BGR2GRAY);                     //对图像进行预处理
threshold(gray_src dest 150 255 THRESH_BINARY_INV);

vector> contours;
vector hierarchy;
findContours(dest contours hierarchy RETR_EXTERNAL CHAIN_APPROX_NONE Point(0 0));    //提取轮廓

vector rect;
Rect min_bounding_rectre_rect;
float tl_x br_y width height;
for (int i = 0; i < contours.size(); i++)
{
if (contourArea(contours[i]) > 50)
{
min_bounding_rect = boundingRect(contours[i]);
rect.push_back(boundingRect(contours[i]));

tl_x = (float)min_bounding_rect.tl().x;
br_y = (float)min_bounding_rect.br().y;
width = (float)min_bounding_rect.width;
height = (float)min_bounding_rect.height;

num_contours[i].x = (tl_x * 2 + width) / 2.0;          //计算轮廓中心点
num_contours[i].y = (br_y * 2 + height) / 2.0;
num_contours[i].index = i;
}
}
sort(num_contours num_contours + contours.size());         //根据轮廓中心点坐标进行排序

vector roi_rect(cont

评论

共有 条评论