Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 #ifndef my_hog_h_DEFINED
00036 #define my_hog_h_DEFINED
00037 
00038 #include <opencv2/core/core.hpp>
00039 #include <opencv2/objdetect/objdetect.hpp>
00040 #include "abstract_feature.h"
00041 #include <vector>
00042 #include <iostream>
00043 
00044 namespace cpl_visual_features
00045 {
00046 template <int win_width, int win_height, int block_width, int block_height,
00047           int x_stride, int y_stride, int cell_width, int cell_height,
00048           int nbins> class MyHOG
00049     : public AbstractFeature<std::vector<float> >
00050 {
00051  public:
00052   MyHOG() : hog_(cv::Size(win_width, win_height),
00053                  cv::Size(block_width, block_height),
00054                  cv::Size(x_stride, y_stride),
00055                  cv::Size(cell_width, cell_height),
00056                  nbins)
00057   {
00058   }
00059 
00060   virtual void operator()(cv::Mat& img, cv::Rect& window)
00061   {
00062     std::vector<float> descriptors;
00063     if (cv::Rect() == window)
00064     {
00065         hog_.compute(img, descriptors);
00066         std::cout << "Computing HOG on entire image" << std::endl;
00067     }
00068     else
00069     {
00070       cv::Size win_stride(window.width, window.height);
00071       cv::Point location(window.x, window.y);
00072       std::vector<cv::Point> locations(1,location);
00073       hog_.compute(img, descriptors, win_stride, cv::Size(), locations);
00074     }
00075 
00076     descriptor_ = descriptors;
00077   }
00078 
00079   virtual std::vector<float> getDescriptor() const
00080   {
00081     return descriptor_;
00082   }
00083 
00084  public:
00085   cv::HOGDescriptor hog_;
00086 
00087  protected:
00088   std::vector<float> descriptor_;
00089 };
00090 }
00091 #endif // my_hog_h_DEFINED