行人偵測是視覺領域熱門且實用的主題,特別在自駕車中重要性不言而喻。
在完成人臉偵測後,行人偵測顯得簡單許多。流程大致相同:先載入分類器,再進行多尺度偵測。這裡直接提供完整程式碼:
#include
#include
#include
using namespace cv;
int main(int argc, char** argv) {
Mat img;
vector people;
img = imread("xingren.jpg", 1);
// 定義 HOG 描述子,使用預設參數
HOGDescriptor defaultHog;
// 也可自訂參數:
// HOGDescriptor defaultHog(cv::Size(64,128), cv::Size(16,16),
// cv::Size(8,8), cv::Size(8,8), 9, 1, -1,
// HOGDescriptor::L2Hys, 0.2, true,
// HOGDescriptor::DEFAULT_NLEVELS);
// 設定 SVM 分類器,使用預設行人偵測器
defaultHog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
// 多尺度行人偵測,回傳矩形框
defaultHog.detectMultiScale(img, people, 0, Size(8,8), Size(0,0), 1.03, 2);
// 畫矩形框標記行人
for (int i = 0; i < people.size(); i++) {
Rect r = people[i];
rectangle(img, r.tl(), r.br(), Scalar(0, 0, 255), 3);
}
namedWindow("偵測行人", CV_WINDOW_AUTOSIZE);
imshow("偵測行人", img);
waitKey(0);
return 0;
}
效果圖如下:
