OpenCV系列教程(九)opencv非特定目标检测之几何图形识别
一 opencv 非特定目标检测之几何图形识别
1 准备训练样本素材
1.1 正样本
又叫积极样本,可以自己用画图板,多画几个图形统一放在 pos 目录,如下:
1.2 负样本
又叫消极样本,你可自己从网上爬一些不相关的图片,也可以自己从电脑找一些,数量大概是 正样本的 3 倍以上,尺寸是正样本的 8-12 倍,图片尺寸必须调整为统一大小,最后统一放在 neg 目录。
批量调整图片大小命令
find ./neg -name '*.jpg' -exec convert -resize 100X100! {} {} \;
2 将图片进行灰度处理
通过下面代码进行批量灰度处理:
#include
#include
#include
using namespace std;
using namespace cv;
//g++ -o gray gray.cpp `pkg-config --cflags --libs opencv`
//./gray img 100
int main(int argc,char *argv[])
{
char src [250];
char obj [250];
if(argc != 3)
{
printf("./gray path 100(num)\n");
return 0;
}
for(int i=1;i<atoi(argv[2])+1;i++)< p="">
{
//将数字字母拼接在一起得到读取文件的路径
sprintf (src, "%s/%d.jpg", argv[1],i);
cout<<src<<endl;< p="">
sprintf (obj, "%s/%d.jpg", argv[1],i);
printf("%s\n",obj);
//从指定路径 buffer 中读取图片
Mat srcImage = imread(src),grayImage;
cvtColor(srcImage,grayImage,CV_BGR2GRAY);
imwrite(obj,grayImage);
}
cvWaitKey();
return 0;
}
3 生成 pos.txt 积极图片描述文件
4 生成 neg.txt 消极图片描述文件
5 生成 vec 文件
opencv_createsamples -vec pos.vec -info pos.txt -num 4 -w 50 -h 50
6 开始样本训练
opencv_traincascade -data xml -vec pos.vec -bg neg.txt -numPos 4 -numNeg 30 -numStages 8 -w 50 -h 50 -minHitRate 0.999 -maxFalseAlarmRate 0.2 -weightTrimRate 0.95 -featureType HAAR -mode ALL
上以过程因环境不同,需要反复修改参数来达到最终的训练效果,一般正常训练一个相对稳定的样本模型需要一两天时间。
7 对几何图进行识别
通过之前讲的人脸识别代码,采用刚刚训练好的 xml 分类器,加载一张几何图看看识别效果:
猜你喜欢LIKE
相关推荐HOT
更多>>javabean是什么?
在Java中,JavaBean是一种符合特定规范的普通Java类,用于封装数据和提供操作数据的方法。JavaBean是一种重要的设计模式,用于实现面向对象编程...详情>>
2023-06-06 16:27:20java零基础入门到精通怎么学?
Java是一门广泛应用于企业级开发和大型应用程序的编程语言。要从零基础入门到精通Java,需要以下步骤和建议:1.学习基础知识:开始学习Java编程...详情>>
2023-06-05 17:02:00token是什么意思
Token是“令牌”的意思,它通常被用于身份验证和授权。在计算机系统中,当用户通过身份验证后,系统会颁发一个Token给用户,用于标识用户身份和...详情>>
2023-04-20 10:57:41虚函数的作用和实现原理
在父类中声明虚函数:在父类中通过在函数声明前加上 virtual 关键字来声明一个虚函数。需要注意的是,虚函数的使用需要谨慎,因为虚函数的调用...详情>>
2023-04-14 14:20:27