Qt-OpenCV学习笔记--计算面积--contourArea()

本文详细介绍了如何使用OpenCV库中的contourArea函数计算二维轮廓的面积,通过C++代码示例展示了如何创建点集构造轮廓,并探讨了定向区域标志对计算结果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

这个函数用来计算轮廓面积。

函数

double cv::contourArea
(
	InputArray 	contour,
    bool 	oriented = false 
)	
contour轮廓(由点的集合构成轮廓)
oriented

定向区域标志

 ● 如果为真,函数将根据轮廓方向(顺时针或逆时针)返回带符号的面积值。

 ● 使用此功能,可以通过获取区域的符号来确定轮廓的方向。

 ● 默认情况下,参数为false,这意味着返回绝对值。

测试代码

#include "widget.h"
#include "ui_widget.h"

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <vector>
#include <QDebug>
#include <sstream>

using namespace cv;
using namespace std;

string douToStr(double d)
{
    ostringstream os;
    if(os<<d)
        return os.str();
    return "null";
}

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->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<Point> 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()<<"面积:"<<area;

    //显示
    imshow("mat",mat);

}

Widget::~Widget()
{
    delete ui;
}

测试结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值