Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
opencv_traincascade CvCascadeClassifier::fillPassedSamples中的无限循环_Opencv_Computer Vision_Haar Wavelet - Fatal编程技术网

opencv_traincascade CvCascadeClassifier::fillPassedSamples中的无限循环

opencv_traincascade CvCascadeClassifier::fillPassedSamples中的无限循环,opencv,computer-vision,haar-wavelet,Opencv,Computer Vision,Haar Wavelet,所以我一直在玩opencv最新的LBP cascade训练器,我一直在运行无限循环。我相信原因可能是因为我的负片(背景)设置有限。然而,程序不应该运行在无限循环中。。。我设法确定了无限循环的位置,并对源代码进行了一些修改,不仅避免了无限循环,而且还改进了结果级联文件中的检测性能。但是,我仍然希望理解代码的人告诉我这是否是一个正确的修复方法,以及它工作的原因(或其他原因): 样品制备: 因此,我有一个正图像,并使用“createsamples”生成100个扭曲/旋转的正样本: opencv_cre

所以我一直在玩opencv最新的LBP cascade训练器,我一直在运行无限循环。我相信原因可能是因为我的负片(背景)设置有限。然而,程序不应该运行在无限循环中。。。我设法确定了无限循环的位置,并对源代码进行了一些修改,不仅避免了无限循环,而且还改进了结果级联文件中的检测性能。但是,我仍然希望理解代码的人告诉我这是否是一个正确的修复方法,以及它工作的原因(或其他原因):

样品制备: 因此,我有一个正图像,并使用“createsamples”生成100个扭曲/旋转的正样本:

opencv_createsamples -img positive1.png -num 100 -bg neg.txt -vec samples.vec -maxidev 50 -w 100 -h 62 -maxxangle 0 -maxyangle 0.6 -maxzangle 0.4 -show 1
“阴性”目录中只有5个阴性样本。然后我的训练指挥部:

opencv_traincascade -data cascade_result -vec samples.vec -bg neg.txt -numStages 10 -numPos 100 -numNeg 200 -featureType LBP -w 100 -h 62 -bt DAB -minHitRate 0.99 -maxFalseAlarmRate 0.2 -weightTrimRate 0.95 -maxDepth 1
请注意,即使在“neg.txt”中只有5个负片图像,我还是设置了-numeng 200。后来我发现numNeg不需要匹配负片图像的数量,因为程序会反复从负片图像中“裁剪”出图像片段,用于训练正片图像

在第4阶段,我遇到了无限循环,它位于(请参见“//!!!!!”):

int-CvCascadeClassifier::fillPassedSamples(int-first,int-count,bool-isPositive,int64&consumed)
{
int getcount=0;
Mat img(级联参数winSize,CV_8UC1);
coutjoe

你可能会遇到和我一样的问题

问题的原因是opencv_traincascade.exe无法正确获取图像宽度和高度,或者原始图像宽度和高度小于训练窗口大小

您可以将以下代码中箭头所指的两行添加到opencv/appa/traincascade/imagestorage.cpp以解决此问题

bool CvCascadeImageReader::NegReader::nextImg()
{
    Point _offset = Point(0,0);
    size_t count = imgFilenames.size();
    for( size_t i = 0; i < count; i++ )
    {
        src = imread( imgFilenames[last++], 0 );
        if(src.rows<winSize.height || src.cols < winSize.width)   <-----------
            continue;                                             <-----------
        if( src.empty() )
            continue;
....
bool-cvcascade-imagereader::NegReader::nextImg()
{
点_偏移=点(0,0);
size\u t count=imgFilenames.size();
对于(大小i=0;ibool CvCascadeImageReader::NegReader::nextImg()
{
    Point _offset = Point(0,0);
    size_t count = imgFilenames.size();
    for( size_t i = 0; i < count; i++ )
    {
        src = imread( imgFilenames[last++], 0 );
        if(src.rows<winSize.height || src.cols < winSize.width)   <-----------
            continue;                                             <-----------
        if( src.empty() )
            continue;
....