轮廓面积(Contour Area)是指轮廓所包围的区域的总面积。通常情况下,轮廓面积的单位是像素的平方。
轮廓长度(Contour Length)又称周长(Perimeter),表示轮廓的闭合边界的长度。轮廓的边界可以看作是由一系列相邻像素点组成的连续路径,轮廓长度即为该路径的总长度。通常情况下,轮廓长度的单位是像素。
double cv::contourArea ( InputArray contour,
bool oriented = false
)
double cv::arcLength ( InputArray curve,
bool closed
)
- //计算轮廓面积与长度
- void Contour_areaAndlength(Mat image){
- Mat gray,binary;
- cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化
- GaussianBlur(gray,gray,Size(9,9),2,2);//滤波
- threshold(gray,binary,170,255,THRESH_BINARY|THRESH_OTSU);//自适应二值化
- //轮廓检测
- vector<vector<Point>> contours;//轮廓
- vector<Vec4i> hierarchy;//存放轮廓结构变量
- findContours(binary,contours,hierarchy,RETR_TREE,CHAIN_APPROX_SIMPLE,Point());
- ostringstream ss;
- //输出轮廓面积
- for(int t=0;t<contours.size();t++){
- double areal= contourArea(contours[t]);
- ss <<"第"<< t<<"轮廓面积:"<<areal<<std::endl;
- }
- //输出轮廓长度
- for(int t=0;t<contours.size();t++){
- double length2= arcLength(contours[t],true);
- ss <<"第"<< t<<"轮廓长度:"<<length2<<std::endl;
- }
- LOGD("%s",ss.str().c_str());
- }