美文网首页
iOS下使用OpenCV进行图像识别

iOS下使用OpenCV进行图像识别

作者: unravelW | 来源:发表于2018-07-12 17:00 被阅读0次

    OpenCV提供了机器学习程序和图像识别的框架。接下来我们看看它是如何实现这些功能的。

    首先OpenCV提供的机器学习是监督学习,也就是我们需要提供给机器正样本和负样本,使机器生成相应的检测器。OpenCV使用进行图像识别的检测器叫级联分类器,所谓的级联分类器,就是将若干的简单的分量分类器(可以理解为一般的普通分类器)依次串联起来,最终的检测分类结果,要依次通过所有的分量分类器才能算是一个有效的检测分类结果。否则,就认为当前检测区域内没有我们需要找的目标。

    所以我们先要做的是,收集训练样本->生成正、负样本描述文件->生成正样本特征文件->进行分类器训练

    OpenCV中有两个程序可以训练级联分类器: opencv_haartraining和opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV 2.x API 以C++编写。这二者主要的区别是 opencv_traincascade 支持 Haar、Hog和 LBP(Local Binary Patterns)三种特征,并易于增加其他的特征。与Haar特征相比,LBP特征是整数特征,因此训练和检测过程都会比Haar特征快几倍。LBP和Haar特征用于检测的准确率,是依赖训练过程中的训练数据的质量和训练参数。训练一个与基于Haar特征同样准确度的LBP的分类器是可能的。

    参考链接:https://blog.csdn.net/uncle_lin/article/details/48582251

    训练完后的级联分类器是一个xml文件。我们将这个文件导入项目中就可以使用进行图像识别了。

    OpenCV中提供了CascadeClassifier类,首先通过项目中的xml文件初始化这个类。

    例如:

    cv::CascadeClassifier humanFaceClassifier([[bundle pathForResource:@"haarcascade_frontalface_alt" ofType:@"xml"] UTF8String])

    接下来将想要识别的图像传入这个类的函数detectMultiScale就可以进行图像识别了

    例如:

    humanFaceClassifier.detectMultiScale(equalizedImage, humanFaceRects, DETECT_HUMAN_FACE_SCALE_FACTOR, DETECT_HUMAN_FACE_MIN_NEIGHBORS, 0, detectHumanFaceMinSize);

    识别到目标的Rect存在函数的第二个参数中。

    至此,OpenCV中的图像识别功能就完成了。

    参考资料:iOS  Application  Development  with  OpenCV 3.pdf  chapter 4

    相关文章

      网友评论

          本文标题:iOS下使用OpenCV进行图像识别

          本文链接:https://www.haomeiwen.com/subject/qhsrpftx.html