@@ -74,6 +74,8 @@ bool image_status = false;
74
74
boost::shared_mutex mutex_image_status;
75
75
76
76
EllipseDetector ellipse_detector;
77
+ HOGDescriptor hog (Size(28 , 28 ), Size(4 , 4 ), Size(4 , 4 ), Size(4 , 4 ), 9);
78
+ bool use_hog = true ;
77
79
78
80
79
81
// 图像接收回调函数,接收web_cam的话题,并将图像保存在cam_image_copy中
@@ -204,6 +206,23 @@ vector<float> hist_feature(cv::Mat& resized_im) // 生成直方图,带入形
204
206
{
205
207
feats[i] /= total;
206
208
}
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
+ }
207
226
return feats; // 返回feats
208
227
}
209
228
@@ -222,7 +241,7 @@ Ptr<SVM> train_svm_classifier(std::string train_imlist, std::string train_imdir)
222
241
while (ifs >> im_name >> label)
223
242
{
224
243
cout << im_name << " " << label << endl;
225
- cout << train_imdir + im_name << endl;
244
+ cout << train_imdir + " / " + im_name << endl;
226
245
Mat im_one = imread (train_imdir + " /" + im_name, 1 );
227
246
all_labels.push_back (label);
228
247
@@ -234,10 +253,15 @@ Ptr<SVM> train_svm_classifier(std::string train_imlist, std::string train_imdir)
234
253
all_feats.push_back (feats);
235
254
}
236
255
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);
238
262
Mat labelsMat (all_feats.size (), 1 , CV_32S);
239
263
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++) {
241
265
float tmp = all_feats[i][t]; // !!!!!!!!!!!!!!!
242
266
float * pf = trainingDataMat.ptr <float >(i, t);
243
267
*pf = tmp;
@@ -526,8 +550,13 @@ int main(int argc, char **argv)
526
550
cv::cvtColor (center_det, center_det, COLOR_BGR2HSV);
527
551
std::vector<float > feat = hist_feature (center_det);
528
552
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++)
531
560
{
532
561
predictDataMat.at <float >(i) = feat[i];
533
562
}
0 commit comments