在这个 openCV 循环中,“faces.size()”是啥意思?
Posted
技术标签:
【中文标题】在这个 openCV 循环中,“faces.size()”是啥意思?【英文标题】:What does 'faces.size()' mean in this openCV loop?在这个 openCV 循环中,“faces.size()”是什么意思? 【发布时间】:2016-05-13 22:43:38 【问题描述】:我正在尝试自学 opencv 和 c++,而用于面部和眼睛检测的 example program 包括以下行:
for(size_t i = 0; i < faces.size(); i++)
我不明白 faces.size() 是什么意思,从那以后 i 可以大于 faces.size()。
它是如何获取数值的?
我在程序的其余部分中看到了很多人脸实例,但我唯一一次看到大小是作为 face_cascade.detectMultiScale 的参数。不过它是大写的,这让我觉得它与 faces.size() 无关。
【问题讨论】:
faces
肯定是某种类型的容器的实例(即std::vector
或std::map
),size
只是返回它当时持有的元素数量。如果你对容器感到困惑,我建议你看看@en.cppreference.com/w/cpp/container
OpenCV 不是开始学习 C++ 的好地方。从没有任何第三方库的 C++ 和 a good book or two 开始。掌握 C++ 的基础知识,然后开始解开 OpenCV
@WhozCraig,对于一个像泥巴一样清晰的人来说——冒号是干什么用的?什么是性病? 的东西是干什么用的?那是声明吗?什么是声明?等等……
这是一个棘手的问题,@LamarLatrell。我们必须在这里做出的基本假设是提问者具有一定的最低知识;否则所有答案都必须以“一开始……”开头。因此,C++ 文本的前几章需要禁止使用,除非有针对性的问题,这些问题无需先涵盖C++ 文本的前几章。
我同意。我不认为将 any 框架混入其中是学习 C++ 的好方法。很多时候,你的注意力从理解和学习语言转移到只学习框架。这很糟糕,因为您最终会错过 很多 的东西,并且您的语言能力会受到影响。如果您对学习语言很认真,请放弃使用 OpenCV,拿起一本好书,然后开始学习。否则,任何教育您有关该语言的努力充其量都是徒劳的。
【参考方案1】:
faces.size()
返回“面孔”的大小,即“面孔”中有多少面孔。
一般来说,基本的 for 循环结构如下:
for ( init; condition; increment )
//your code...
只要条件为真,它就会运行,即只要 'i' 小于 faces.size()(可能是 '10' 或其他整数值)。
'i' 将变得更大,因为每个循环迭代都将 1 添加到其中。这由 i++ 指令管理。
如果您正在为循环语法而苦苦挣扎,那么 openCV 可能不是开始学习 C++ 的最佳场所,因为许多示例期望的能力水平高于“初学者”(有意或无意地通过简单的坏编码/缺乏评论等)
【讨论】:
【参考方案2】: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
(在你的情况下是面孔)是一个
矩形向量,其中每个矩形包含检测到的 对象,矩形可能部分位于原始图像之外。
如您所见,objects
是 passed by reference 以允许在函数内部对其进行修改。
std::vector<Type>::size()
也会给你向量的大小,所以,i<faces.size() is necessary to get the index i inside the bounds of the vector
。
【讨论】:
以上是关于在这个 openCV 循环中,“faces.size()”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
在 OpenCV 中循环遍历 16 位 Mat 像素的有效方法