Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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++ 编译train_hog.cpp示例_C++_Opencv - Fatal编程技术网

C++ 编译train_hog.cpp示例

C++ 编译train_hog.cpp示例,c++,opencv,C++,Opencv,我想为动物创建定制的猪检测器。所以我想编译OpenCV 3.1中的train_HOG.cpp示例。但我在目录方面有一个问题。 这是用于加载图像的代码 void load_images( const string & prefix, const string & filename, vector< Mat > & img_lst ); void load_images( const string & prefix, const string &

我想为动物创建定制的猪检测器。所以我想编译OpenCV 3.1中的
train_HOG.cpp
示例。但我在目录方面有一个问题。 这是用于加载图像的代码

void load_images( const string & prefix, const string & filename, vector< Mat > & img_lst );


void load_images( const string & prefix, const string & filename, vector< Mat > & img_lst )
{
    string line;
    ifstream file;

    file.open( (prefix+filename).c_str() );
    if( !file.is_open() )
    {
        cerr << "Unable to open the list of images from " << filename << " filename." << endl;
        exit( -1 );
    }

    bool end_of_parsing = false;
    while( !end_of_parsing )
    {
        getline( file, line );
        if( line.empty() ) // no more file to read
        {
            end_of_parsing = true;
            break;
        }
        Mat img = imread( (prefix+line).c_str() ); // load the image
        if( img.empty() ) // invalid image, just skip it.
            continue;
#ifdef _DEBUG
        imshow( "image", img );
        waitKey( 10 );
#endif
        img_lst.push_back( img.clone() );
    }
}



int main( int argc, char** argv )
{
    cv::CommandLineParser parser(argc, argv, "{help h|| show help message}"
            "{pd||pos_dir}{p||pos.lst}{nd||neg_dir}{n||neg.lst}");
    if (parser.has("help"))
    {
        parser.printMessage();
        exit(0);
    }
    vector< Mat > pos_lst;
vector< Mat > full_neg_lst;
vector< Mat > neg_lst;
vector< Mat > gradient_lst;
vector< int > labels;
string pos_dir = parser.get<string>("C:/Train_HOG/Franksye_dataset/Train/pos/");
string pos = parser.get<string>("Train/pos");
string neg_dir = parser.get<string>("C:/Train_HOG/Franksye_dataset/Train/neg/");
string neg = parser.get<string>("Train/neg");
if( pos_dir.empty() || pos.empty() || neg_dir.empty() || neg.empty() )

    {
        cout << "Wrong number of parameters." << endl
            << "Usage: " << argv[0] << " --pd=pos_dir -p=pos.lst --nd=neg_dir -n=neg.lst" << endl
            << "example: " << argv[0] << " --pd=/INRIA_dataset/ -p=Train/pos.lst --nd=/INRIA_dataset/ -n=Train/neg.lst" << endl;
        exit( -1 );
}
load_images( pos_dir, pos, pos_lst );
labels.assign( pos_lst.size(), +1 );
const unsigned int old = (unsigned int)labels.size();
load_images( neg_dir, neg, full_neg_lst );
sample_neg( full_neg_lst, neg_lst, Size( 96,160 ) );
labels.insert( labels.end(), neg_lst.size(), -1 );
CV_Assert( old < labels.size() );

compute_hog( pos_lst, gradient_lst, Size( 96, 160 ) );
compute_hog( neg_lst, gradient_lst, Size( 96, 160 ) );

train_svm( gradient_lst, labels );

test_it( Size( 96, 160 ) ); // change with your parameters

return 0;
}

我解决了这个问题。这是一个使用
cv::CommandLineParser
的代码

int main( int argc, char** argv )
{
    cv::CommandLineParser parser(argc, argv, "{help h|| show help message}"
            "{@pd|C:/Train_HOG/Franksye_dataset/|pos_dir}{@p|Train/pos.lst|pos.lst}{@nd|C:/Train_HOG/Franksye_dataset/|neg_dir}{@n|Train/neg.lst|neg.lst}");
    if (parser.has("help"))
    {
        parser.printMessage();
        exit(0);
    }
    vector< Mat > pos_lst;
    vector< Mat > full_neg_lst;
    vector< Mat > neg_lst;
    vector< Mat > gradient_lst;
    vector< int > labels;
    string pos_dir = parser.get<string>("@pd");
    string pos = parser.get<string>("@p");
    string neg_dir = parser.get<string>("@nd");
    string neg = parser.get<string>("@n");
    if( pos_dir.empty() || pos.empty() || neg_dir.empty() || neg.empty() )
    {
        cout << "Wrong number of parameters." << endl
            << "Usage: " << argv[0] << " --pd=pos_dir -p=pos.lst --nd=neg_dir -n=neg.lst" << endl
            << "example: " << argv[0] << " --pd=/INRIA_dataset/ -p=Train/pos.lst --nd=/INRIA_dataset/ -n=Train/neg.lst" << endl;
        exit( -1 );
int main(int argc,char**argv)
{
CommandLineParser解析器(argc,argv,“{help h | | show help message}”
“{@pd|C:/Train|HOG/Franksye|u数据集/| pos|u dir}{@p|Train/pos.lst | pos.lst}{@nd|C:/Train|HOG/Franksye|u数据集/| neg|dir{@n| Train/neg.lst | neg.lst}”);
if(parser.has(“help”))
{
parser.printMessage();
出口(0);
}
向量位置;
向量full_neg_lst;
向量neg_lst;
向量梯度;
向量标签;
字符串pos_dir=parser.get(“@pd”);
string pos=parser.get(“@p”);
字符串neg_dir=parser.get(“@nd”);
字符串neg=parser.get(“@n”);
if(pos|dir.empty()| pos.empty()| neg|dir.empty()| neg.empty())
{

cout const string&prefix,这个参数是什么?它可以用于路径,或者如果文件都在默认文件夹中,则可以将其保留为空。这是什么意思@drescherjm?示例dir=C:\Train\pos\787.png然后生成prefix
C:/Train/pos/
const string&filename
?我在pos folder@drescherj中有71个图像M这将是一个现有文本文件的文件名,该文本文件每行有一个文件名。文本文件中的这些文件名是您的图像文件。
int main( int argc, char** argv )
{
    cv::CommandLineParser parser(argc, argv, "{help h|| show help message}"
            "{@pd|C:/Train_HOG/Franksye_dataset/|pos_dir}{@p|Train/pos.lst|pos.lst}{@nd|C:/Train_HOG/Franksye_dataset/|neg_dir}{@n|Train/neg.lst|neg.lst}");
    if (parser.has("help"))
    {
        parser.printMessage();
        exit(0);
    }
    vector< Mat > pos_lst;
    vector< Mat > full_neg_lst;
    vector< Mat > neg_lst;
    vector< Mat > gradient_lst;
    vector< int > labels;
    string pos_dir = parser.get<string>("@pd");
    string pos = parser.get<string>("@p");
    string neg_dir = parser.get<string>("@nd");
    string neg = parser.get<string>("@n");
    if( pos_dir.empty() || pos.empty() || neg_dir.empty() || neg.empty() )
    {
        cout << "Wrong number of parameters." << endl
            << "Usage: " << argv[0] << " --pd=pos_dir -p=pos.lst --nd=neg_dir -n=neg.lst" << endl
            << "example: " << argv[0] << " --pd=/INRIA_dataset/ -p=Train/pos.lst --nd=/INRIA_dataset/ -n=Train/neg.lst" << endl;
        exit( -1 );