我试图自学opencv和c ++,这个example program用于面部和眼睛检测包括以下内容:
for(size_t i = 0; i < faces.size(); i++)
我不明白faces.size()是什么意思,并且从那以后我可以比faces.size()更大。
如何获取数值?
我在整个程序的其余部分看到了很多面孔实例,但我唯一看到尺寸的时候是face_cascade.detectMultiScale的参数。虽然它是大写的,这让我觉得它与faces.size()无关。
答案 0 :(得分:1)
faces
正在填充:
//-- Detect faces
face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CASCADE_SCALE_IMAGE, Size(30, 30) );
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
。
答案 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; (有意无意地通过简单的错误编码/缺乏评论等)。