资源简介
用传统方法识别数码管,思想是三次扫描数码管,得到一个编码值,然后去匹配。

代码片段和文件信息
#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鼠标程序,亲测可用
相关资源
- 语音识别LD3320开发资料包含51代码
- 人脸识别开发包免费,可商用,有演
- HumanDet(公交车系统模式识别)
- 语音信号处理 赵力
- [免费]图像识别c 源码
- 一个人脸识别程序源码
- 【单片机】51单片机数码管显示万年历
- 25.数码管显示0-99
- 基于bp神经网络的表情识别
- 支持向量机的船舶目标识别
- STC12C5A60S2 CH4521 驱动数码管 显示
- 基于OpenCV的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- LDA 人脸识别
- 血液图像处理—细胞识别
- CH454键盘与数码管显示程序
- 编译词法分析器识别关键字常数和符
- 基于EWB软件的数码管显示控制器
- DSP 语音识别程序 DTW MFCC
- opencv环境配置
- halcon简单实现人脸识别.hdev
- win10 64位下编译的opencv4.5.5库,opencv
- scratch -教学案例 识别物品颜色.sb3
- OCR识别字符
- halcon-ocr训练及识别
- Halcon车牌识别
- 单片机电子琴 数码管显示
- 基于HALCON识别指示灯亮灭和OCR识别.
- 滑块验证码无原图纯计算识别坐标.
- 解决Y470/Y570更新2.12BIOS后无法识别8G内
评论
共有 条评论