@@ -74,6 +74,8 @@ bool image_status = false;
7474boost::shared_mutex mutex_image_status;
7575
7676EllipseDetector ellipse_detector;
77+ HOGDescriptor hog (Size(28 , 28 ), Size(4 , 4 ), Size(4 , 4 ), Size(4 , 4 ), 9);
78+ bool use_hog = true ;
7779
7880
7981// 图像接收回调函数,接收web_cam的话题,并将图像保存在cam_image_copy中
@@ -204,6 +206,23 @@ vector<float> hist_feature(cv::Mat& resized_im) // 生成直方图,带入形
204206 {
205207 feats[i] /= total;
206208 }
209+
210+ if (use_hog)
211+ {
212+ cv::Mat resized_im_gray;
213+ cvtColor (resized_im, resized_im_gray, CV_BGR2GRAY);
214+
215+ // cout << "w, h: " << resized_im_gray.cols << ", " << resized_im_gray.rows << endl;
216+ vector<float > descriptors; // HOG描述子向量
217+ hog.compute (resized_im_gray, descriptors, Size (4 , 4 ));
218+ feats.insert (
219+ feats.end (),
220+ std::make_move_iterator (descriptors.begin ()),
221+ std::make_move_iterator (descriptors.end ())
222+ );
223+ // cout << "descriptors size" << descriptors.size() << endl;
224+ // cout << "feats size" << feats.size() << endl;
225+ }
207226 return feats; // 返回feats
208227}
209228
@@ -222,7 +241,7 @@ Ptr<SVM> train_svm_classifier(std::string train_imlist, std::string train_imdir)
222241 while (ifs >> im_name >> label)
223242 {
224243 cout << im_name << " " << label << endl;
225- cout << train_imdir + im_name << endl;
244+ cout << train_imdir + " / " + im_name << endl;
226245 Mat im_one = imread (train_imdir + " /" + im_name, 1 );
227246 all_labels.push_back (label);
228247
@@ -234,10 +253,15 @@ Ptr<SVM> train_svm_classifier(std::string train_imlist, std::string train_imdir)
234253 all_feats.push_back (feats);
235254 }
236255
237- Mat trainingDataMat (all_feats.size (), 30 , CV_32FC1);
256+ int feats_len = 30 ;
257+ if (use_hog)
258+ {
259+ feats_len = 471 ;
260+ }
261+ Mat trainingDataMat (all_feats.size (), feats_len, CV_32FC1);
238262 Mat labelsMat (all_feats.size (), 1 , CV_32S);
239263 for (int i = 0 ; i < all_feats.size (); i++) {
240- for (int t = 0 ; t < 30 ; t++) {
264+ for (int t = 0 ; t < feats_len ; t++) {
241265 float tmp = all_feats[i][t]; // !!!!!!!!!!!!!!!
242266 float * pf = trainingDataMat.ptr <float >(i, t);
243267 *pf = tmp;
@@ -526,8 +550,13 @@ int main(int argc, char **argv)
526550 cv::cvtColor (center_det, center_det, COLOR_BGR2HSV);
527551 std::vector<float > feat = hist_feature (center_det);
528552
529- cv::Mat predictDataMat (1 , 30 , CV_32F);
530- for (int i=0 ;i<30 ;i++)
553+ int feats_len = 30 ;
554+ if (use_hog)
555+ {
556+ feats_len = 471 ;
557+ }
558+ cv::Mat predictDataMat (1 , feats_len, CV_32F);
559+ for (int i=0 ; i<feats_len; i++)
531560 {
532561 predictDataMat.at <float >(i) = feat[i];
533562 }
0 commit comments