Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于检测具有HOG和x2B的对象的矩形;支持向量机Opencv_C++_Opencv - Fatal编程技术网

C++ 用于检测具有HOG和x2B的对象的矩形;支持向量机Opencv

C++ 用于检测具有HOG和x2B的对象的矩形;支持向量机Opencv,c++,opencv,C++,Opencv,我想使用矩形进行对象检测,但首先我想了解代码。这是一个示例代码: vector<Rect> found, found_filtered; size_t i, j; hog.detectMultiScale(mGray, found, 0, Size(8,8), Size(32,32), 1.05, 2); for( i = 0; i < found.size(); i++ ) { Rect r = found

我想使用矩形进行对象检测,但首先我想了解代码。这是一个示例代码:

vector<Rect> found, found_filtered;
    size_t i, j;

    hog.detectMultiScale(mGray, found, 0, Size(8,8), Size(32,32), 1.05, 2);


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



    if(found.size()) {
            Rect r = found[0];
            r.x += cvRound(r.width*0.1);
            r.width = cvRound(r.width*0.8);
            r.y += cvRound(r.height*0.07);
            r.height = cvRound(r.height*0.8);
            LOGD("c : %d, r : %d",r.height,r.width);



         rectangle(mGray, r.tl(), r.br(), cv::Scalar(255,0,0), 3);
    }

你觉得怎么样?

看起来像是缩小了对象矩形,如下所示(红色-原始检测,绿色-新矩形):


我认为这是因为当你们训练探测器时,你们会在物体周围传递一些有背景的样本。所以当你们用这种检测器检测物体时,矩形会比物体大很多。为了使矩形更具体,您可以如上所述缩小它。

为什么要减小矩形的宽度和高度@akarsakov?那个图像链接是什么?为了使矩形尺寸更接近对象,因为探测器将输出对象周围有背景的矩形。图片是用来说明这个过程的。你们认为代码对我@akarsakov完全有效吗?你能给我一个链接来说明这个过程吗?这一联系并非如此found@FranksyeSipangkar你应该做个实验。若矩形的大小对您来说足够好,那个就按原样使用它。否则,只需删除这行代码(从
r.x+=cvRound(r.width*0.1);
)。谢谢你的建议。这对我来说很有用。我有个问题要问你,你知道使用HOG+SVM的自定义对象检测的准确率吗@阿卡萨科夫
if(found.size()) {
                Rect r = found[0];
                r.x += cvRound(r.width*0.1);
                r.width = cvRound(r.width*0.8);
                r.y += cvRound(r.height*0.07);
                r.height = cvRound(r.height*0.8);
                LOGD("c : %d, r : %d",r.height,r.width);
r.x += cvRound(r.width*0.1); // move rectangle to right by 10% of width
r.width = cvRound(r.width*0.8); // reduce rectangle width
r.y += cvRound(r.height*0.07); // move rectangle down by 7% of width
r.height = cvRound(r.height*0.8); // reduce rectangle width
LOGD("c : %d, r : %d",r.height,r.width); // print coordinates of top left corner, width and height