资源简介
用传统方法识别数码管,思想是三次扫描数码管,得到一个编码值,然后去匹配。
代码片段和文件信息
#include
#include
#include “svm.h“
using namespace cv;
using namespace std;
////ROI区域开始结束点
//Point g_start(310 315);
//Point g_end(1033 525);
//ROI区域开始结束点
Point g_start(181 420);
Point g_end(838 580);
//二值化阈值
int my_threshold = 65;
void on_Trackbar(int void*)
{
;
}
//2 3 4 5 6 7 8 9 0
static unsigned char model_num2[9] = { 0x5b 0x4f 0x66 0x6d 0x7d 0x27 0x7f 0x6f 0x3f };
int match_num(Mat &img)
{
// 6 5 4 3 2 1 0
//2 0x5b 1 0 1 1 0 1 1
//3 0x4f 1 0 0 1 1 1 1
//4 0x66 1 1 0 0 1 1 0
//5 0x6d 1 1 0 1 1 0 1
//6 0x7d 1 1 1 1 1 0 1
//7 0x27 0 1 0 0 1 1 1 0x07 0 0 0 0 1 1 1
//8 0x7f 1 1 1 1 1 1 1
//9 0x6f 1 1 0 1 1 1 1
//0 0x3f 0 1 1 1 1 1 1
////2 3 4 5 6 7 8 9 0
//unsigned char model_num2[9] = { 0x5b 0x4f 0x66 0x6d 0x7d 0x27 0x7f 0x6f 0x3f };
Mat img_temp = img.clone();
/*
---------------------00000-------------------------
--------------------5-----1------------------------
--------------------5-----1------------------------
---------------------66666-------------------------
--------------------4-----2------------------------
--------------------4-----2------------------------
---------------------33333-------------------------
*/
rectangle(img_temp Rect(0 0 img_temp.cols img_temp.rows) Scalar(0) 1); //处理边界
int y1 = img_temp.rows >> 2; //y方向1/4处
int y2 = (img_temp.rows >> 2) * 3;; //y方向3/4处
int xx = img_temp.cols >> 1; //x方向1/2处
int yy = img_temp.rows >> 1; //x方向1/2处
unsigned char temp_value = 0;
//识别到1
if ((double)img.rows / (double)img.cols > 2.5)
return 1;
//两条横线检测遍历
for (int y = y1; y < img_temp.rows; y += (y1 * 2))
{
uchar *pp = img_temp.ptr(y);
for (int x = 0; x < img_temp.cols - 1; x++)
{
if (pp[x] == 0)
{
if (pp[x + 1] == 255)
{
if (x < xx && y < yy) temp_value |= (0x01 << 5);
if (x > xx && y < yy) temp_value |= (0x01 << 1);
if (x < xx && y > yy) temp_value |= (0x01 << 4);
if (x > xx && y > yy) temp_value |= (0x01 << 2);
}
}
}
}
//一条竖线检测遍历
for (int y = 0; y < img_temp.rows - 1; y++)
{
uchar *pp = img_temp.ptr(y);
if (pp[xx] == 0)
{
if (pp[xx + img_temp.step] == 255)
{
if (y < y1) temp_value |= (0x01 << 0);
if (y > y2) temp_value |= (0x01 << 3);
if (y > y1 && y < y2) temp_value |= (0x01 << 6);
}
}
}
//查表匹配
for (int model_i = 0; model_i < 9; model_i++)
{
if (temp_value == model_num2[model_i])
{
if (model_i == 8) return 0; //0为特殊情况
else return model_i + 2;
}
}
printf(“not match id is [%d]\n“ temp_value);
return -1;
}
int main()
{
//Mat img = imread(“img1.jpg“);
//Mat img_show = img.clone();
//svm_train();
//waitKey(0);
while (1)
{
Mat img = imread(“IMG_2993.JPG“);
Mat img_show = img.clone(); //用于显示
Mat img_gray;
Mat img_roi;
namedWindow(“
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6701 2019-05-26 13:55 main.cpp
文件 231598 2019-05-26 10:44 IMG_2993.JPG
- 上一篇:微信小程序期末复习题.docx
- 下一篇:STM32的PS2鼠标程序,亲测可用
相关资源
- 汇编语言实现数码管的同时控制显示
- imdb-wiki中的wiki人脸部分,共3GB
- 机器视觉霍夫圆检测识别木材死节O
- 百度车牌识别使用demo
- 汉王人脸识别门禁系统
- LabVIEW读取txt小说,统计汉字字数,验
- 51单片机驱动74hc595去控制8位数码管
- 基于神经网络的语音情感识别
- 人脸识别方面的几篇外文论文
- 数码管显示实验proteus仿真
- 图像的预处理灰度图、二值化、字符
- 基于OCR技术的书写文字识别系统设计
- rgb hsv颜色转化识别软件
- 汉字识别源码VC
- 人脸识别方法的设计与实现论文答辩
- 基于LabVIEW的七段数码管.vi
- 车牌识别.rar
- 批量处理图片大小
- OpenCV实现相位相关图像配准
- 目标识别 红外.zip
- 四位数码管原理及封装
- C51程序 频率测量模块化程序库(等精
- 微信小程序开发之人脸识别源码
- 递推最小二乘法的代码
- 用于车牌字符识别的SVM算法
- 基于图像识别的车辆门禁系统
- 模式识别 PCA
- opencv彩色图转换为灰度图并保存
- vgg_generated_80.i
- 8位数码管显示+矩阵键盘汇编程序
评论
共有 条评论