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

What does 'faces.size()' mean in this openCV loop?

本文关键字:是什么 意思 size faces 循环 openCV      更新时间:2023-10-16

我正在尝试自学opencv和c++,这个人脸和眼睛检测的示例程序包括以下行:

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

我不明白faces.size()是什么意思,从那以后,在什么时候我可以大于faces.size().

它是如何获得数值的

在程序的其余部分中,我看到了很多面的实例,但我唯一一次看到size是作为face_cascade.detectMultiScale的参数。不过它是大写的,这让我认为它与faces.size()无关。

faces.size()

返回"面"的大小,即"面"中有多少面。

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

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

只要条件为true,即只要"i"小于faces.size()(可能是"10"或其他整数值),它就会运行。

"i"将变得更大,因为每次循环都会向其添加迭代1。这是由i++指令管理的。

我建议,如果你在循环语法方面遇到困难,openCV可能不是开始学习C++的最佳场所,因为许多示例都期望比"初学者"更高的能力水平(有意或无意地通过简单的糟糕编码/缺乏注释等)

faces在此处填充:

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

根据OpenCV文档:

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(在您的情况下是人脸)是

矩形的矢量,其中每个矩形包含检测到的对象,则矩形可以部分地在原始图像之外。

正如您所看到的,objects是通过引用传递的,以允许在函数中对其进行修改。

另外,std::vector<Type>::size()会给你向量的大小,所以,i<faces.size() is necessary to get the index i inside the bounds of the vector