1

私は画像処理の初心者で、プロジェクトで OpenCV をいじり始めたばかりです。私は歩行者の歩行のビデオ信号を持っています.HOGを使用してbckgound減算を行うpedestrain.cppプログラムを実行しており、添付の画像のようなことをしたいと考えていますここに画像の説明を入力.人が検出された後、次のことを行いました

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));
}

しかし、写真のような出力フレームを取得できません。どうすればよいか教えてください。ありがとうございました

4

1 に答える 1