OpenCV:findcontours(),外部轮廓太多

时间:2017-05-24 09:54:51

标签: c++ opencv

我想查找苹果的所有轮廓,但是当我使用contours.size()时,轮廓的数量超过了苹果的数量。

以下是用于查找轮廓的图片和我在其上绘制轮廓的图片,以及程序的结果。

enter image description here

以下是代码。

//Contours  
vector<vector<Point>> contours,hull;
vector<Vec4i> hierarchy;
RNG rng(12345);
findContours(con, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);

cout<<"contours.size(): "<<contours.size()<<endl;
cout<<"hierarchy.size(): "<<hierarchy.size()<<endl;


//draw contours and calculate areas
int area[10];
int currentareaCounted = 0;

for(int i = 0; i<contours.size()-1; i++){

    Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0, 255), 255);
    drawContours(contoursImg, contours, i, color, 2, 8, hierarchy);

    Mat drawingMatCount = cv::Mat::zeros(src_color.rows,src_color.cols, CV_8UC1);
    drawContours(drawingMatCount, contours, i, 255, -1, 8);
    currentareaCounted = countNonZero(drawingMatCount);

    area[i]=currentareaCounted;


    cout<<i<<"'th area "<<" : "<<currentareaCounted<<endl;
}

我很困惑为什么contous.size()是7.它让我在循环中使用contours.size() - 1,我习惯drawcontours,否则,程序将会中断。

如果有人发现任何错误,希望告诉我。非常感谢。

1 个答案:

答案 0 :(得分:1)

首先,您必须找到boundRect,然后您可以像该代码那样绘制轮廓

let alertController = UIAlertController(title: "Поздравляем!", message: "Ваш комментарий сохранен! Если хотите изменить его, выключите и включите переключатель Комментария!", preferredStyle: UIAlertControllerStyle.alert)

let okAction = UIAlertAction(title: "Окей", style: .default) { (action) -> Void in
    let sb = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "mailVerify")
    self.present(sb, animated: true, completion: nil)
}

alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)