图像轮廓计算
轮廓面积与周长
基本原理

opencvAPI有具体的实现方法
代码演示
计算周长
计算面积contourArea(contours[t])

计算周长arcLength(contours[t], true);

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main() {
Mat src = imread("D:/ps/te.png");
if (src.empty())
{
cout << "could not find the image";
return -1;
}
//namedWindow("input", WINDOW_FREERATIO);
//imshow("input", src);
//二值化
GaussianBlur(src, src, Size(3, 3), 0);
Mat gray, binary;
cvtColor(src, gray, COLOR_BGR2GRAY);
threshold(gray, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);
//轮廓发现
imshow("binary", binary);
vector<vector<Point>>contours;
vector<Vec4i>hierachy;
//CHAIN_APPROX_SIMPLE 和CHAIN_APPROX_NONE 顶点 全连
findContours(binary, contours, hierachy, RETR_TREE, CHAIN_APPROX_NONE, Point());
for (size_t t = 0; t < contours.size(); t++) {
//面积
double area = contourArea(contours[t]);
//周长
double len = arcLength(contours[t], true);
if (area < 100 || len < 10) continue;
//绘制成椭圆
/* RotatedRect rrt = minAreaRect(contours[t]);
ellipse(src, rrt, Scalar(255, 0, 0), 2, 8);*/
//Rect box = boundingRect(contours[t]);
//获取ROI
//rectangle(src, box, Scalar(0, 0, 255), 2, 8, 0);
printf("area : %.2f,contour lenght : %.2f\n", area, len);
drawContours(src, contours, t, Scalar(0, 0,255), 2, 8);
}
//drawContours(src, contours, -1, Scalar(0, 0, 255), 2, 8);
imshow("find contours demo", src);
waitKey(0);
destroyAllWindows();
return 0;
}
圆
矩形
椭圆
最大/最小外接轮廓
版权声明:本文为qq_51325797原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。