我正在运行此循环以获取连接组件的标签(Opencv的connectedComponentsWithStats),这些标签在单独的向量中大于某个阈值“areaVal”。 然而,当我测试循环时,我得到了一些意想不到的天文数字,并且我得到了一些零,这首先被排除在循环之外。
最重要的是,当我运行相同的代码两次时,我在labelIndex向量中得到不同的值!
我迫切需要帮助。
vector<int> labelIndex;
//starting from 1 to exclude the background label
cout << "Number of labels: " << nLabels << ". Entering loop\n\n"; //checkpoint
for (int i=1; i<nLabels; i++)
{
//cout << i << ") "; //checkpoint
int area = statsv.at<int>(i, CC_STAT_AREA);
if (area >= areaVal)
{
labelIndex.push_back(i);
cout << labelIndex[i] << " "; //checkpoint
}
}
答案 0 :(得分:1)
当您执行此操作时,您正在访问labelIndex
越界,因为i
从1开始:
cout << labelIndex[i] << " "; //checkpoint
如果您的目标是打印添加到矢量的最后一个值,那么以下内容会更安全:
cout << labelIndex.back() << " "; //checkpoint
请参阅std::vector::back()功能文档。