这个函数用来计算轮廓面积。
double cv::contourArea
(
InputArray contour,
bool oriented = false
)
contour | 轮廓(由点的集合构成轮廓) |
oriented | 定向区域标志 ● 如果为真,函数将根据轮廓方向(顺时针或逆时针)返回带符号的面积值。 ● 使用此功能,可以通过获取区域的符号来确定轮廓的方向。 ● 默认情况下,参数为false,这意味着返回绝对值。 |
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
#include
#include
#include
using namespace cv;
using namespace std;
string douToStr(double d)
{
ostringstream os;
if(os<setupUi(this);
//生成画板
Mat mat(500,500,CV_8UC3,Scalar(240,150,100));
//构造点
Point2f a(100,100);
Point2f b(400,100);
Point2f c(400,400);
Point2f d(100,400);
//绘制点
circle(mat,a,5,Scalar(255,255,255),2,8);
circle(mat,b,5,Scalar(255,255,255),2,8);
circle(mat,c,5,Scalar(255,255,255),2,8);
circle(mat,d,5,Scalar(255,255,255),2,8);
//生成轮廓
vector contour;
contour.push_back(a);
contour.push_back(b);
contour.push_back(c);
contour.push_back(d);
//计算面积(所有的一切都是为了它!)
double area = contourArea(contour);
//文本参数
string str = douToStr(area);//文本内容
int fontFace = FONT_HERSHEY_COMPLEX_SMALL;//定义字体
double fontScale = 2;//定义大小
int thickness = 2;//定义线宽
int baseline = 0;
//获取文本大小
Size size = getTextSize(str,fontFace,fontScale,thickness,&baseline);
//计算文本位置
Point origin;
origin.x = mat.size().width/2 - size.width/2;
origin.y = mat.size().height/2 + size.height/2;
//其它参数
Scalar color = Scalar(0,255,0);//定义颜色
int lineType = 8;//定义线段类型
bool bottomLoftOrigin = false;//定义左远点
//绘制文本
putText(mat,str,origin,fontFace,fontScale,color,thickness,lineType,bottomLoftOrigin);
//打印
qDebug()<<"面积:"<