Qt-OpenCV学习笔记--计算周长--arcLength()
概述
这个函数用来计算 轮廓的周长 或者 曲线的长度。
函数
double cv::arcLength
(
InputArray curve,
bool closed
)
curve | 计算对象(轮廓 或者 图形的顶点) |
closed | 标识符(曲线是否闭合,一般为true) |
测试代码
#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>
using namespace cv;
using namespace std;
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//生成画板
Mat mat = Mat::zeros(500,500,CV_8UC1);
//构造点
Point2f a(100,100);
Point2f b(400,100);
Point2f c(400,400);
Point2f d(100,400);
//生成轮廓
vector<Point> contour_rec;
contour_rec.push_back(a);
contour_rec.push_back(b);
contour_rec.push_back(c);
contour_rec.push_back(d);
//计算矩形的周长
double len_rec = cv::arcLength(contour_rec,true);
//打印
qDebug()<<"矩形的周长:"<<len_rec;
//绘制圆
Point center(mat.size().width/2,mat.size().height/2);
circle(mat,center,150,255,-1);
//获取轮廓
vector<vector<Point>> contours_cir;
findContours(mat,contours_cir,RETR_EXTERNAL,CHAIN_APPROX_TC89_KCOS );
//计算圆的周长
double len_cir = cv::arcLength(contours_cir[0],true);
//打印
qDebug()<<"圆的周长:"<<len_cir;
qDebug()<<"数量:"<<contours_cir.size();
//显示
imshow("mat",mat);
}
Widget::~Widget()
{
delete ui;
}
测试结果
测试过程中发现,用函数 findContours() 生成 contours ,周长的计算结果,与理论计算值相比较,存在偏差。
通过修改参数 method 的值,反复测试和比较,发现值为 CHAIN_APPROX_TC89_KCOS 时,偏差最小。