内容简介:为了让我的iOS应用识别1€,2€和0.50€硬币我一直在尝试使用opencv_createsamples和opencv_traincascade来创建我自己的classifier.xml.所以,我从一个短视频裁剪了60张2欧元硬币的图像,如下所示:然后,我使用opencv_createsamples将它们与随机背景相结合.我获得了类似于此的12000张图片:
为了让我的iOS应用识别1€,2€和0.50€硬币我一直在尝试使用opencv_createsamples和opencv_traincascade来创建我自己的classifier.xml.所以,我从一个短视频裁剪了60张2欧元硬币的图像,如下所示:
然后,我使用opencv_createsamples将它们与随机背景相结合.我获得了类似于此的12000张图片:
我运行了以下命令:
opencv_createsamples -img positives / i.jpg -bg negatives.txt -info i.txt -num 210 -maxidev 100 -maxxangle 0.0 -maxyangle 0.0 -maxzangle 0.9 -bgcolor 0 -bgthresh 0 -w 48 -h 48(for i from 0至60)
cat * .txt> positives.txt
opencv_createsamples -info positives.txt -bg negatives.txt -vec 2.vec -num 12600 -w 48 -h 48
opencv_traincascade -data final -vec 2.vec -bg negatives.txt -numPos 12000 -numNeg 3000 -numStages 20 -featureType LBP -precalcValBufSize 2048 -precalcIdxBufSize 2048 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -w 48 -h 48
训练在第13阶段停止.一旦我得到了一个cascade.xml,我就在我的智能手机拍摄的一张简单图像上立即尝试了(使用detectMultiScale()),但没有检测到任何内容:
如果我将其中一个用作训练的图像作为输入,那么它的效果非常好:
我真的不明白为什么会发生这种情况并且它让我疯了,最重要的是因为我一直试图让它工作数周……你能不能告诉我我在哪里弄错了?
我写的简短程序在这里:
#include "opencv2/opencv.hpp" using namespace cv; int main(int, char**) { Mat src = imread("2b.jpg"); Mat src_gray; std::vector<cv::Rect> money; CascadeClassifier euro2_cascade; cvtColor(src, src_gray, CV_BGR2GRAY ); equalizeHist(src_gray, src_gray); if ( !euro2_cascade.load( "cascade.xml" ) ) { printf("--(!)Error loading\n"); return -1; } euro2_cascade.detectMultiScale( src_gray, money, 1.1, 3, 0|CASCADE_SCALE_IMAGE/*CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_SCALE_IMAGE*/, cv::Size(10, 10),cv::Size(2000, 2000) ); printf("%d\n", int(money.size())); for( size_t i = 0; i < money.size(); i++ ) { cv::Point center( money[i].x + money[i].width*0.5, money[i].y + money[i].height*0.5 ); ellipse( src, center, cv::Size( money[i].width*0.5, money[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 ); } namedWindow( "Display window", WINDOW_AUTOSIZE ); imwrite("result.jpg",src); }
我还尝试将 feature homography 用于我的OpenCV版本3.1.因此,我为我的版本下载了opencv_contrib并尝试编译xfeatures2d模块,但我在CMakeList文件中出现了CMake错误…而且xfeature2d甚至不存在于xcc的opencv框架中,所以即使我在我的电脑上工作也可以不要在iOS中使用它…
UPDATE
据我所知,我刚刚尝试删除了equalizeHist(src_gray,src_gray);我已经设置了detectMultiScale()“中的邻居数量,这就是我得到的:
更新2
正如有人建议的那样,在 this 教程之后,我刚刚使用裁剪后的正片创建了一个.vec文件,只有硬币.我用这个命令:
opencv_createsamples -vec i.vec -w 48 -h 48 -num 210 -img ./positives/i.jpg -maxidev 100 -maxxangle 0 -maxyangle 0 -maxzangle 0.9 -bgcolor 0 -bgthresh 0
(对于我从0到60)
如您所见,没有用于创建样本的背景图像.
然后,在下载 mergevec.py 之后,我将所有矢量文件合并在一起.现在我要开始另一场LBP培训…我希望它能更好地运作
以上所述就是小编给大家介绍的《c – 为什么OpenCV仅在训练图像中识别对象?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 原 荐 Qt封装百度人脸识别+图像识别
- 走进AI时代的文档识别技术 之表格图像识别
- 揭秘“图像识别”的工作原理
- REM图像识别市场分析
- 图像识别攻击还没完全解决,语音识别攻击又来了!
- 零基础小白快速打造图像识别模型
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Web Design
Ethan Watrall、Jeff Siarto / O’Reilly Media, Inc. / 2009-01-02 / USD 49.99
Want to know how to make your pages look beautiful, communicate your message effectively, guide visitors through your website with ease, and get everything approved by the accessibility and usability ......一起来看看 《Head First Web Design》 这本书的介绍吧!