Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV:如何创建与OpenCV_一起使用的.vec文件_C++_Ios_Opencv_Image Processing_Opencv3.0 - Fatal编程技术网

C++ OpenCV:如何创建与OpenCV_一起使用的.vec文件

C++ OpenCV:如何创建与OpenCV_一起使用的.vec文件,c++,ios,opencv,image-processing,opencv3.0,C++,Ios,Opencv,Image Processing,Opencv3.0,正如我在上一篇文章中所解释的,我正在尝试生成一些cascade.xml文件,以识别要在iOS应用程序中使用的欧元硬币。无论如何,我发现在理解如何生成一个.vec文件作为opencv\u traincascade的输入时有很多困难。这是因为我听到了许多不同的观点:有人告诉我,矢量文件必须只包含正面图像,其中只包含要识别的对象;相反,另一个人(也正如我在教程中读到的)说,矢量文件必须包含“样本”图像,换句话说,要识别的对象是由opencv\u createsamples添加到其中的随机背景。换言之:

正如我在上一篇文章中所解释的,我正在尝试生成一些
cascade.xml
文件,以识别要在iOS应用程序中使用的欧元硬币。无论如何,我发现在理解如何生成一个.vec文件作为
opencv\u traincascade
的输入时有很多困难。这是因为我听到了许多不同的观点:有人告诉我,矢量文件必须只包含正面图像,其中只包含要识别的对象;相反,另一个人(也正如我在教程中读到的)说,矢量文件必须包含“样本”图像,换句话说,要识别的对象是由
opencv\u createsamples
添加到其中的随机背景。换言之:

opencv_createsamples-img positives/1.png-bg negatives.txt-info 1.txt-num 210-maxangle 0.0-maxyangle 0.0-maxzangle 0.9-bgcolor 255-bgsthresh 8-w 48-h48

它生成了12000张图像。 最后,我使用以下内容创建了.vec文件:

cat*.txt>positives.txt

opencv_createsamples-info positives.txt-bg negatives.txt-vec 2.vec-num 12600-w 48-h48

因此,我想问您以下两个向量文件中包含哪些正确的图像:

此外,启动培训的最终命令是什么?这是我到目前为止使用过的:

opencv_traincascade-data final-vec 2.vec-bg negatives.txt-numPos 12000-numNeg 3000-numStages 20-featureType HAAR-precalcValBufSize 2048-precalcIdxBufSize 2048-minHitRate 0.999-maxfalsalarmrate 0.5-w 48-h48-mode ALL

其中.vec文件包含12000个样本图像(背景+硬币识别)。 如果.vec文件仅包含正面图像(仅包含硬币),我应该如何告诉
opencv\u traincascade
使用示例图像进行训练

我真的需要知道如何正确地做事情,因为我已经进行了很多培训,但没有得到正确的结果,而且由于这些培训需要花费很多小时或几天的时间来执行,我不能再浪费时间了

谢谢大家的关注

更新 我设法用LBP创建了一个
cascade.xml
文件。看看如果我给一个简单的OpenCV程序一个用作训练样本的图像会发生什么:

而图像如下所示:

它根本不起作用。我真的不知道我在哪里犯了错误

更新 也许首先将正面图像转换为灰度会有所帮助? OpenCV级联(HAAR、LBP)可以出色地检测具有永久特征的对象。例如,所有面在相同的位置都有鼻子、眼睛和嘴巴。OpenCV级联经过训练,可以在所需的对象类中搜索公共特征,并忽略对象之间变化的特征。问题是,级联使用搜索窗口的矩形,但硬币具有圆形。因此,硬币的图像总是有部分背景。 因此,硬币的训练图像必须包括所有可能的背景,以便分类器可以忽略它们(否则将仅在特定背景上检测硬币)


因此,所有训练样本必须具有相同的图像比率、硬币的大小和位置(硬币位于中心的方形图像,硬币直径=0.8-0.9图像宽度),以及不同的背景

我使用了INRIA培训的
阴性样本
数据库

这个输入(png,硬币周围有alpha透明):

将此命令与此命令一起使用:

opencv_createsamples-img pos_color.png-num 10-bg neg.txt-info test.dat-maxangle 0.6-maxyangle 0-maxzangle 0.3-maxidev 100
-bgcolor 0-bgthresh 0

产生如下输出:

所以背景色显然不起作用。但是,在开始时转换为灰度会给我以下输入:

同一命令产生如下输出:


我知道这并不是对你所有问题的答案,但也许它仍然有帮助。

我的培训样本都与我在问题中发布的onw相似。正如你所看到的,我有很多这样的图像,有硬币和很多可能的背景。。。他们说的对吗?我会在硬币的边缘添加一些背景,以便分类器可以使用硬币的边缘。我知道,但这是opencv_createsamples的问题。我的意思是,如果我使用从谷歌图片下载的2欧元硬币,那么这4个角不在示例图片中。如果我使用gimp创建的png图像(带有圆形裁剪)并从短视频的帧中获得,则有这4个角。你知道如何修复它或者我在哪里犯了错误吗?如果你用GIMP创建图像,你可以很容易地使用alpha通道在插入硬币的过程中删除角。@Mika我用GIMP只裁剪硬币的照片。然后由
opencv\u createsamples
完成随机背景的构图,而不是gimpThank you非常非常Mika的!!我将尝试立即创建带有灰度图像的样本。我会让你知道的。衷心感谢您的回答,谢谢您的回答,但它确实不起作用。首先,我使用
convert../0.png-colorspace Gray 0.png
将所有图像转换为灰度,然后我启动了您发布的命令,但输出是相同的…无需执行任何操作。谢谢你,你的灰度图像背景是黑色的吗?它的值必须为0。如果你检查后仍然无法工作,请上传这样的灰度输入图像。它不是黑色的。我试着用gimp和
convert
(来自ImageMagic)进行转换,但背景不是黑色的……你是怎么做到的?你可以在我的问题中看到ax示例,我刚刚在gimp中更新了它,只需删除背景(标记一个圆并反转选择),然后将其涂成黑色