资源简介
用OpenCV实现的交通标志动态识别,方法是自己想的,希望对大家有帮助,有好的想法可以互相交流。
代码片段和文件信息
#ifdef _CH_
#pragma package
#endif
#define CV_NO_BACKWARD_COMPATIBILITY
#include “cv.h“
#include “highgui.h“
#include “cxcore.h“
#include
#include
#include
IplImage* stop=0;
IplImage* left=0;
IplImage* m1=0;
IplImage* m2=0;
IplImage* m3=0;
IplImage* m4=0;
IplImage* m5=0;
IplImage* m6=0;
IplImage* m7=0;
IplImage* m8=0;
IplImage* m9=0;
IplImage* m10=0;
IplImage* m11=0;
IplImage* m12=0;
IplImage* m13=0;
IplImage* m14=0;
IplImage* m15=0;
IplImage* image=0;
IplImage* show;
CvMemStorage* tempStorage=0;
CvMemStorage* stopStorage=0;
CvMemStorage* leftStorage=0;
CvMemStorage* m1Storage=0;
CvMemStorage* m2Storage=0;
CvMemStorage* m3Storage=0;
CvMemStorage* m4Storage=0;
CvMemStorage* m5Storage=0;
CvMemStorage* m6Storage=0;
CvMemStorage* m7Storage=0;
CvMemStorage* m8Storage=0;
CvMemStorage* m9Storage=0;
CvMemStorage* m10Storage=0;
CvMemStorage* m11Storage=0;
CvMemStorage* m12Storage=0;
CvMemStorage* m13Storage=0;
CvMemStorage* m14Storage=0;
CvMemStorage* m15Storage=0;
const char* wndname = “Flag“;
int itempFlag=0trigonFlag=0squareFlag=0;
CvSeq* result;
CvSeq* slice;
double s t hu;
CvSeqReader reader;
CvSeq* tctr;
CvSeq* p_temp;
CvSeq temp;
CvSeq* p_stopCtr;
CvSeq stopCtr;
CvSeq* p_leftCtr;
CvSeq leftCtr;
CvSeq* p_m1Ctr;
CvSeq m1Ctr;
CvSeq* p_m2Ctr;
CvSeq m2Ctr;
CvSeq* p_m3Ctr;
CvSeq m3Ctr;
CvSeq* p_m4Ctr;
CvSeq m4Ctr;
CvSeq* p_m5Ctr;
CvSeq m5Ctr;
CvSeq* p_m6Ctr;
CvSeq m6Ctr;
CvSeq* p_m7Ctr;
CvSeq m7Ctr;
CvSeq* p_m8Ctr;
CvSeq m8Ctr;
CvSeq* p_m9Ctr;
CvSeq m9Ctr;
CvSeq* p_m10Ctr;
CvSeq m10Ctr;
CvSeq* p_m11Ctr;
CvSeq m11Ctr;
CvSeq* p_m12Ctr;
CvSeq m12Ctr;
CvSeq* p_m13Ctr;
CvSeq m13Ctr;
CvSeq* p_m14Ctr;
CvSeq m14Ctr;
CvSeq* p_m15Ctr;
CvSeq m15Ctr;
// helper function:
// finds a cosine of angle between vectors
// from pt0->pt1 and from pt0->pt2
double angle( CvPoint* pt1 CvPoint* pt2 CvPoint* pt0 )
{
double dx1 = pt1->x - pt0->x;
double dy1 = pt1->y - pt0->y;
double dx2 = pt2->x - pt0->x;
double dy2 = pt2->y - pt0->y;
return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);
}
void preorder(CvSeq* ctrCvSeq* saveCvMemStorage* storage)
{
if(ctr)
{
result = cvApproxPoly( ctr sizeof(CvContour) storage
CV_POLY_APPROX_DP cvContourPerimeter(ctr)*0.008 0 );
if( result->total ==3 && fabs(cvContourArea(resultCV_WHOLE_SEQ)) > 1000)
{
tctr=ctr;
ctr=ctr->v_next;
if(ctr)
{
slice=cvSeqSlice(ctrcvSlice(0CV_WHOLE_SEQ_END_INDEX)storage0);
*save=*slice;
trigonFlag=1;
}
else
ctr=tctr;
}
if( result->total ==4 && fabs(cvContourArea(resultCV_WHOLE_SEQ)) > 1000)
{
s = 1;
for( i = 0; i < (result->total+1); i++ )
{
// find minimum angle between joint
// edges (maximum of cosine)
if( i >= 2 )
{
t = fabs(angle(
(CvPoint*)cvGetSeqElem( result i )
(CvPoint*)cvGetSeqElem( result i-2 )
(CvPoint*)cvGetSeqElem( result i-1 )));
s = s < t ? s : t;
}
}
if(s<0.1)
{
tctr=ctr;
- 上一篇:电动汽车无线充电系统的电磁安全
- 下一篇:UMAT子程序详解
相关资源
- 基于PCIe的FPGA动态配置设计与实现
- mtrace 源码
- 房屋信息咨询网动态网页
- 基于OpenCV的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- js实现动态修改table内容功能
- MFC控件动态拖动
- 模拟首次适应动态分区存储管理方案
- ListBox动态添加数据删除数据和上移下
- 基于51单片机的16*16点阵动态显示
- opencv环境配置
- 基于属性驱动的矿体动态建模
- 基于经济时间序列预测的露天矿开采
- 易语言叮小当动态加密算法源码
- win10 64位下编译的opencv4.5.5库,opencv
- 从动态晶格QCD模拟得出迷人的四夸克
- 风味动态域壁中lt;mathgt; mrow mn 2 / mn
- Chern-Simons动态引力中的非扰动旋转黑
- 含激活码AOMEI Dynamic Disk Manager 12 wind
- 基于ARM的电子相册源码含动态库可运
- openwrt在STA模式(中继模式下动态切换
- opencl编程指南随书代码
- OPENCL编程指南随书源码
- 向量域在动态域墙上的定位
- 基于电费回扣的CPP机制下的居民用电
- IBM动态基础架构——Power服务器
- 强子共振气体方法中的动态净电荷波
- 密粘褶菌马尾松木粉培养物挥发性成
- 基于动态分类器集成选择和GM(21)
- 动态链表的汇编语言实现
评论
共有 条评论