我想查找苹果的所有轮廓,但是当我使用contours.size()时,轮廓的数量超过了苹果的数量。
以下是用于查找轮廓的图片和我在其上绘制轮廓的图片,以及程序的结果。
以下是代码。
//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,否则,程序将会中断。
如果有人发现任何错误,希望告诉我。非常感谢。
答案 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)