OpenCV二值图像分析

轮廓属性
二值图像分析最常见的一个主要方式就是轮廓发现与轮廓分析,其中轮廓发现的目的是为轮廓分析做准备,经过轮廓分析我们可以得到轮廓各种有用的属性信息、常见的如下:
轮廓面积
轮廓周长
轮廓几何矩
轮廓的最小外接矩形
轮廓的最大外接矩形
轮廓的最小外接圆
轮廓的最小外接三角形
轮廓拟合(支持拟合直线、椭圆、圆)
轮廓的凸包
轮廓层次信息提取
多边形逼近
计算欧拉数
函数介绍
opencv中提供大量轮廓分析函数,通过这些函数我们可以方便快捷的得到轮廓的各种有用属性信息、高效完成各种二值图像分析需求,下面是我总结的一些常用的函数列表与说明。
opencv中轮廓发现函数如下:
void cv::findcontours(inputarray      image,outputarrayofarrays contours,outputarray hierarchy,int   mode,int   method,point       offset = point())  
参数解释如下:
image: 输入图像、八位单通道的,背景为黑色
contours: 得到的轮廓图像
hierarchy: 层次图像,根据需要提取轮廓层次信息
mode: 决定提取到层次信息内容,是多层还是单层
method: 每个轮廓的编码信息
offset: 表示轮廓偏移,默认为0
轮廓分析相关的常用函数
// 计算轮廓面积double cv::contourarea(inputarray contour,bool oriented = false)// 计算轮廓周长double cv::arclength(inputarray      curve,bool        closed)// 计算几何矩与中心距moments cv::moments(inputarray      array,bool        binaryimage = false)// 计算最小外接矩形rotatedrect cv::minarearect(inputarray      points)// 计算最大外接矩形rect cv::boundingrect(inputarray      array)// 计算最小外接圆/拟合圆void cv::minenclosingcircle(inputarray      points,point2f &        center,float &    radius)// 计算最小外接三角形/拟合三角形double cv::minenclosingtriangle(inputarray      points,outputarray   triangle)// 拟合直线void cv::fitline(inputarray      points,outputarray   line,int   disttype,double    param,double    reps,double    aeps)// 拟合椭圆rotatedrect cv::fitellipse(inputarray      points)// 计算凸包void cv::convexhull(inputarray      points,outputarray   hull,bool        clockwise = false,bool        returnpoints = true)// 多边形逼近-逼近真实形状void cv::approxpolydp(inputarray      curve,outputarray   approxcurve,double    epsilon,bool        closed)  
灵活使用上述轮廓属性信息,可以实现对二值图像的几何形状判别、测量、面积过滤、获取每个对象的几何属性包括面积、周长、编码点、形状、层次/位置信息、欧拉数、中心位置、倾斜角度。
综合运用代码演示
2020年 以前我分享过一些综合使用的例子,列表如下(都看过你就赢了):
二值图像分析案例精选
opencv二值图像案例分析精选 | 第二期
opencv轮廓层次分析实现欧拉数计算
opencv寻找复杂背景下物体的轮廓
如何识别出轮廓准确的长和宽
opencv中几何形状识别与测量
opencv中blob特征提取与几何形状分类
opencv直线拟合检测
opencv中实现曲线与圆拟合
这里再分享一个硬币计数的例子!
代码如下:
// 加载图像mat img = imread(d:/coinsb.png);imshow(original image, img);// 阈值化操作mat gray, binary;cvtcolor(img, gray, color_bgr2gray);float t = threshold(gray, binary, 0, 255, thresh_binary|thresh_otsu);imshow(binary, binary);imwrite(d:/binary1.png, binary);// 形态学操作mat se = getstructuringelement(morph_rect, size(3, 3));morphologyex(binary, binary, morph_open, se, point(-1, -1));// 轮廓发现vector hireachy;vector> contours;bitwise_not(binary, binary);findcontours(binary, contours, hireachy, retr_external, chain_approx_simple, point());mat result = img.clone();point2f center;float radius;// 轮廓分析for (size_t t = 0; t < contours.size(); t++) {    double area = contourarea(contours[t]);    if (area < 1000) {        continue;    }    rotatedrect rrt = fitellipse(contours[t]);    radius = min(rrt.size.width, rrt.size.height)/2.0;    circle(result, rrt.center, radius, scalar(0, 0, 255), 4, 8, 0);    moments mm = moments(contours[t]);    double cx = mm.m10 / mm.m00;    double cy = mm.m01 / mm.m00;    circle(result, point(cx, cy), 2, scalar(255, 0, 0), 2, 8, 0);}// 显示结果imshow(result, result);imwrite(d:/drawing.png, result);waitkey(0);


阿里达摩院宣布成立其第15个实验室:XG实验室
如何使用ST WESU参考设计来实现目标
固态继电器内部结构原理图
小型功率UPS电源九个注意事项
OPPO Watch屏幕参数公布 像素密度与iPhone 11一致
OpenCV二值图像分析
Orcad怎么设置复制位号的增加机制
DS18B20温度传感器的使用方法说明
远离蚊子叮咬困扰,灭蚊灯真的有用吗?
惠普elitebookg5评测 120%的商务人士笔记本
汽车ECU详解
Graphcore与Cirrascale联合发布Graphcloud
电子线常用的绝缘材料
MWC2018十大技术盘点_今年机皇从这里挑
连接器发展特点_连接器的六大发展趋势
lcd1602只亮不显示_lcd1602简单显示程序
BOE(京东方)供货vivo S17全系产品 引领超清护眼显示风向标
全球14大未来派绿色建筑大观
根据不同粒度的CAE,可以实现从粗犷和精确的内容感知编码
云母电容器的结构与特点