2016-05-13 28 views
-1

我試圖教自己的OpenCV和C++,這example program用於面部和眼部檢測包括行:在這個openCV循環中'faces.size()'是什麼意思?

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

我不明白是什麼faces.size()表示,和在什麼從以下點我可以比faces.size()更大。

它是如何獲取數值的?

我在整個程序的其餘部分看到大量的面部實例,但唯一一次我看到尺寸是作爲face_cascade.detectMultiScale的參數。但它是大寫,這讓我認爲它與faces.size()無關。

+0

'faces'確實是某種類型的容器(即'std :: vector'或'std :: map')的一個實例,'''只是返回元素的數量它在那個時刻成立。如果你對容器感到困惑,我建議你看看@ http://en.cppreference.com/w/cpp/container –

+0

'faces'被聲明爲'std :: vector faces;'。我不確定如何可以比現在清楚。 – WhozCraig

+2

OpenCV不是開始學習C++的好地方。從C++開始,沒有任何第三方庫和[一本好書或兩本](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。獲取C++的基礎知識,然後開始解開OpenCV – user4581301

回答

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(你的情況面)是

矩形矢量,其中每個矩形包含檢測到的 對象,rect角度可能部分在原始圖像之外。

正如你所看到的,objectspassed by reference允許其修改函數內。

另外std::vector<Type>::size()會給你你的載體的大小,所以,i<faces.size() is necessary to get the index i inside the bounds of the vector

1
faces.size() 

返回'faces'的大小,即'faces'中有多少個面。

在用於循環一般基本的結構如下所示:

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

只要條件爲真它將運行,即,只要「i」是小於faces.size()(其可能是'10'或其他整數值)。

'i'將會變得更大,因爲每個循環迭代1被添加到它。這由i ++指令管理。

我建議如果你在循環語法中苦苦掙扎,openCV可能不是開始學習C++的最佳地方,因爲很多示例都期望比'beginner'更高的能力水平(有意和無意地通過簡單錯誤的編碼/缺乏評論等)