什么' faces.size()'在这个openCV循环中意味着什么?

时间:2016-05-13 22:43:39

标签: c++ opencv for-loop vector

我试图自学opencv和c ++,这个example program用于面部和眼睛检测包括以下内容:

for(size_t i = 0; i < faces.size(); i++)

我不明白faces.size()是什么意思,并且从那以后我可以比faces.size()更大。

如何获取数值?

我在整个程序的其余部分看到了很多面孔实例,但我唯一看到尺寸的时候是face_cascade.detectMultiScale的参数。虽然它是大写的,这让我觉得它与faces.size()无关。

2 个答案:

答案 0 :(得分:1)

faces正在填充:

//-- Detect faces
face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );

根据OpenCV documentation

void cv::CascadeClassifier::detectMultiScale    (   InputArray      image,
        std::vector< Rect > &   objects,
        double      scaleFactor = 1.1,
        int     minNeighbors = 3,
        int     flags = 0,
        Size    minSize = Size(),
        Size    maxSize = Size() 
    )   

其中std::vector< Rect > & objects(面向您的情况)是

  

矩形矢量,其中每个矩形包含检测到的   对象,矩形可能部分位于原始图像之外。

如您所见,objectspassed by reference,允许在函数内进行修改。

此外,std::vector<Type>::size()会为您提供矢量的大小,i<faces.size() is necessary to get the index i inside the bounds of the vector

答案 1 :(得分:1)

faces.size()

返回&#39; faces&#39;的大小,即&#39; faces&#39;中有多少个脸。

一般来说,基本for循环的结构如下:

for ( init; condition; increment )
{
   //your code...
}

只要条件为真,它就会运行,即只要&#39; i&#39;小于faces.size()(可能是&#39; 10&#39;或其他一些整数值)。

&#39;我&#39;每个循环迭代1都会加到它上面。这是由i ++指令管理的。

我建议如果您正在努力解决循环语法问题,那么openCV可能不是开始学习C ++的最佳场所,因为很多示例都希望能力水平高于初学者#&# 39; (有意无意地通过简单的错误编码/缺乏评论等)。