#include <iostream>
 
 
const int POSE_PAIRS[3][20][2] = {
{   
    {1,2}, {1,5}, {2,3},
    {3,4}, {5,6}, {6,7},
    {1,8}, {8,9}, {9,10},
    {1,11}, {11,12}, {12,13},
    {1,0}, {0,14},
    {14,16}, {0,15}, {15,17}
},
{   
    {0,1}, {1,2}, {2,3},
    {3,4}, {1,5}, {5,6},
    {6,7}, {1,14}, {14,8}, {8,9},
    {9,10}, {14,11}, {11,12}, {12,13}
},
{   
    {0,1}, {1,2}, {2,3}, {3,4},         
    {0,5}, {5,6}, {6,7}, {7,8},         
    {0,9}, {9,10}, {10,11}, {11,12},    
    {0,13}, {13,14}, {14,15}, {15,16},  
    {0,17}, {17,18}, {18,19}, {19,20}   
}};
 
int main(
int argc, 
char **argv)
 
{
        "{ h help           | false     | print this help message }"
        "{ p proto          |           | (required) model configuration, e.g. hand/pose.prototxt }"
        "{ m model          |           | (required) model weights, e.g. hand/pose_iter_102000.caffemodel }"
        "{ i image          |           | (required) path to image file (containing a single person, or hand) }"
        "{ d dataset        |           | specify what kind of model was trained. It could be (COCO, MPI, HAND) depends on dataset. }"
        "{ width            |  368      | Preprocess input image by resizing to a specific width. }"
        "{ height           |  368      | Preprocess input image by resizing to a specific height. }"
        "{ t threshold      |  0.1      | threshold or confidence value for the heatmap }"
        "{ s scale          |  0.003922 | scale for blob }"
    );
 
    String modelTxt = samples::findFile(parser.get<
string>(
"proto"));
 
    String modelBin = samples::findFile(parser.get<
string>(
"model"));
 
    String imageFile = samples::findFile(parser.get<
String>(
"image"));
 
    int W_in = parser.get<int>("width");
    int H_in = parser.get<int>("height");
    float thresh = parser.get<float>("threshold");
    float scale  = parser.get<float>("scale");
 
    if (parser.get<bool>("help") || modelTxt.empty() || modelBin.empty() || imageFile.empty())
    {
        cout << "A sample app to demonstrate human or hand pose detection with a pretrained OpenPose dnn." << endl;
        parser.printMessage();
        return 0;
    }
 
    int midx, npairs, nparts;
         if (!dataset.compare("COCO")) {  midx = 0; npairs = 17; nparts = 18; }
    else if (!dataset.compare("MPI"))  {  midx = 1; npairs = 14; nparts = 16; }
    else if (!dataset.compare("HAND")) {  midx = 2; npairs = 20; nparts = 22; }
    else
    {
        std::cerr << "Can't interpret dataset parameter: " << dataset << std::endl;
        exit(-1);
    }
 
    
    
    {
        std::cerr << "Can't read image from the file: " << imageFile << std::endl;
        exit(-1);
    }
 
    
    
 
 
    
    vector<Point> points(22);
    for (int n=0; n<nparts; n++)
    {
        
        
        double conf;
        if (conf > thresh)
            p = pm;
        points[n] = p;
    }
 
    
    float SX = float(img.
cols) / W;
 
    float SY = float(img.
rows) / H;
 
    for (int n=0; n<npairs; n++)
    {
        
        Point2f a = points[POSE_PAIRS[midx][n][0]];
 
        Point2f b = points[POSE_PAIRS[midx][n][1]];
 
 
        
        if (a.
x<=0 || a.
y<=0 || b.
x<=0 || b.
y<=0)
 
            continue;
 
        
 
    }
 
 
    return 0;
}
Designed for command line parsing.
Definition utility.hpp:890
 
n-dimensional dense array class
Definition mat.hpp:938
 
MatSize size
Definition mat.hpp:2456
 
uchar * ptr(int i0=0)
Returns a pointer to the specified matrix row.
 
int cols
Definition mat.hpp:2433
 
bool empty() const
Returns true if the array has no elements.
 
int rows
the number of rows and columns or (-1, -1) when the matrix has more than 2 dimensions
Definition mat.hpp:2433
 
_Tp y
y coordinate of the point
Definition types.hpp:202
 
_Tp x
x coordinate of the point
Definition types.hpp:201
 
Template class for specifying the size of an image or rectangle.
Definition types.hpp:338
 
This class allows to create and manipulate comprehensive artificial neural networks.
Definition dnn.hpp:535
 
void setInput(CV_ND InputArray blob, const String &name="", double scalefactor=1.0, const Scalar &mean=Scalar())
Sets the new input value for the network.
 
Mat forward(const String &outputName=String())
Runs forward pass to compute output of layer with name outputName.
 
void minMaxLoc(InputArray src, double *minVal, double *maxVal=0, Point *minLoc=0, Point *maxLoc=0, InputArray mask=noArray())
Finds the global minimum and maximum in an array.
 
std::string String
Definition cvstd.hpp:151
 
#define CV_32F
Definition interface.h:59
 
@ circle
Definition gr_skig.hpp:62
 
Mat blobFromImage(InputArray image, double scalefactor=1.0, const Size &size=Size(), const Scalar &mean=Scalar(), bool swapRB=false, bool crop=false, int ddepth=CV_32F)
Creates 4-dimensional blob from image. Optionally resizes and crops image from center,...
 
Net readNet(CV_WRAP_FILE_PATH const String &model, CV_WRAP_FILE_PATH const String &config="", const String &framework="", int engine=ENGINE_AUTO)
Read deep learning network represented in one of the supported formats.
 
void imshow(const String &winname, InputArray mat)
Displays an image in the specified window.
 
int waitKey(int delay=0)
Waits for a pressed key.
 
Mat imread(const String &filename, int flags=IMREAD_COLOR_BGR)
Loads an image from a file.
 
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar &color, int thickness=1, int lineType=LINE_8, int shift=0)
Draws a line segment connecting two points.
 
int main(int argc, char *argv[])
Definition highgui_qt.cpp:3
 
Definition all_layers.hpp:47