我是圖像處理的初學者,剛剛開始擺弄OpenCV的項目。我有行人walking.I的視頻信號正在運行的程序pedestrain.cpp確實whic第bckgound subtrction uing HOG和想要做的事,如圖像連接。我已經做了以下檢測Opencv和圖像處理:提取身體框架的輪廓
int main (int argc, const char * argv[])
{
VideoCapture cap(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
if (!cap.isOpened())
return -1;
Mat img;
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
if((WriteFP=fopen("output.txt", "w")) == NULL) ErrorExit(ER_WRITE_OPEN);
namedWindow("video capture", CV_WINDOW_AUTOSIZE);
namedWindow("Motion", CV_WINDOW_AUTOSIZE);
while (true)
{
cap >> img;
if (!img.data)
continue;
vector<Rect> found, found_filtered;
hog.detectMultiScale(img, found, 0, Size(8,8), Size(32,32), 1.05, 2);
size_t i, j;
for (i=0; i<found.size(); i++)
{
Rect r = found[i];
for (j=0; j<found.size(); j++)
if (j!=i && (r & found[j])==r)
break;
if (j==found.size())
found_filtered.push_back(r);
}
for (i=0; i<found_filtered.size(); i++)
{
Rect r = found_filtered[i];
r.x += cvRound(r.width*0.1);
r.width = cvRound(r.width*0.8);
r.y += cvRound(r.height*0.06);
r.height = cvRound(r.height*0.9);
rectangle(img, r.tl(), r.br(), cv::Scalar(0,255,0), 2);
}
imshow("video capture", img);
IplImage *mat_img;
mat_img=cvCloneImage(&(IplImage)img);
cvThreshold(img,img, 0, 255, CV_THRESH_BINARY_INV);
cvDilate(img, img, 0,1);
cvErode(img, img, 0, 0);
cvFindContours(img, storage_contours, &contours, sizeof(CvContour),
CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0));
}
的peson後
但是,我無法得到像圖片中的輸出幀。可以有人告訴我需要做什麼。謝謝
請勿將HoG(梯度直方圖)人物檢測器與背景建模/背景消除技術混合使用。從人物檢測器中獲得一個邊界框,從背景建模方法中,您可以獲得前景物體的陰影。 – 2013-03-29 00:10:40
謝謝。我嘗試過背景減法,但無法得到像圖片中那樣的輪廓。您可以發佈代碼或者可以鏈接到我可以獲得輪廓的鏈接。 – user1142671 2013-03-30 04:51:05
你能解釋一下,你的輸入數據是什麼或者你確切的問題是什麼?您是否擁有行人的RGB視頻,並且需要前景/ Shilouhette面具?或者您是否搜索了一種提取shilouhette的方法,並且您輸入的視頻是前景掩碼,如您所示。 – 2013-03-30 13:17:48