#include <opencv2/opencv.hpp>
#include <iostream> using namespace cv;
using namespace std;
RNG rng(12345); int main(int argc, char** argv)
{
Mat src = imread("f:/images/qq/20200215213837.png");
//Mat src = imread("f:/images/qq/yezi.png");
if (src.empty())
{
printf("Could not find the image!\n");
return -1;
} namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src); // 做一个高斯模糊,消除一些细微的东西
GaussianBlur(src, src, Size(3, 3), 0);
GaussianBlur(src, src, Size(3, 3), 0); Mat gray, binary;
cvtColor(src, gray, COLOR_BGR2GRAY);
imshow("gray", gray); // 二值化
threshold(gray, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
imshow("binary", binary); vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
//findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
// 只绘制最外层的轮廓
findContours(binary, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point()); // 一个一个绘制
for (size_t t = 0; t < contours.size(); t++) {
double area = contourArea(contours[t]);
double len = arcLength(contours[t], true);
printf("#%d === area: %.2f, length: %.2f\n", t, area, len);
// 可以在这里过滤较小的面积或周长的轮廓, 2改为-1,就是填充这个轮廓
drawContours(src, contours, t, Scalar(0, 0, 255), 1, 8);
Rect box = boundingRect(contours[t]);
rectangle(src, box, Scalar(255, 0, 0), 1, 8);
// 最小外接矩形矩形
Point2f pts[4];
RotatedRect rrt = minAreaRect(contours[t]);
rrt.points(pts);
for (int i = 0; i < 4; i++) {
line(src, pts[i], pts[(i+1)%4], Scalar(0, 255, 255), 1, 8);
}
// 绘制外接椭圆
ellipse(src, rrt, Scalar(255, 255, 0), 1, 8);
} // -1代表绘制所有
//drawContours(src, contours, -1, Scalar(0, 0, 255), 2, 8);
imshow("result", src); waitKey(0);
destroyAllWindows(); return 0;
}

opencv:图像轮廓计算的更多相关文章

  1. OpenCV图像轮廓检测

    轮廓检测: 轮廓检测的原理通俗的说就是掏空内部点,比如原图中有3*3的矩形点.那么就可以将中间的那一点去掉. 一.关键函数1.1  cvFindContours函数功能:对图像进行轮廓检测,这个函数将 ...

  2. opencv 图像轮廓

    图片解析: 原图: code: #include <opencv\cv.h> #include <opencv\highgui.h> #include <opencv\c ...

  3. opencv 图像仿射变换 计算仿射变换后对应特征点的新坐标 图像旋转、缩放、平移

    常常需要最图像进行仿射变换,仿射变换后,我们可能需要将原来图像中的特征点坐标进行重新计算,获得原来图像中例如眼睛瞳孔坐标的新的位置,用于在新得到图像中继续利用瞳孔位置坐标. 仿射变换在:http:// ...

  4. OpenCV图像的轮廓的匹配

    http://blog.sina.com.cn/s/blog_67a7426a0101cxl0.html 一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮 ...

  5. opencv 6 图像轮廓与图像分割修复 3 图像的矩,分水岭,图像修补

    图像的矩 矩的计算:moments()函数 计算轮廓面积:contourArea()函数 #include "opencv2/highgui/highgui.hpp" #inclu ...

  6. OpenCV计算机视觉学习(8)——图像轮廓处理(轮廓绘制,轮廓检索,轮廓填充,轮廓近似)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...

  7. OpenCV笔记(3)(Canny边缘检测、高斯金字塔、拉普拉斯金字塔、图像轮廓、模板匹配)

    一.Canny边缘检测 Canny边缘检测是一系列方法综合的结果.其中主要包含以下步骤: 1.使用高斯滤波器,平滑图像,滤除噪声. 2.计算图像中每个像素点的梯度强度和方向. 3.应用非极大值抑制(N ...

  8. opencv: 轮廓提取;

    一般轮廓提取是通过对图像的梯度进行卷积计算,得到图像边缘(滤波),常用的边缘检测方法有candy.sobel. Laplacian等,再对二值化后的边缘图像进行轮廓计算: 1.Candy算子: cv: ...

  9. OpenCV3入门(十)图像轮廓

    1.图像轮廓 1.1图像轮廓与API函数 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形,相对于边缘,轮廓是连续的,边缘并不全部连续.一般地,获取图像轮廓要经过下面几个步骤: 1)     读取 ...

随机推荐

  1. 【Unity|C#】基础篇(12)——反射(Reflection)(核心类:Type、Assembly)

    [学习资料] <C#图解教程>(第24章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu. ...

  2. ubuntu set up 2 - 双系统时间问题

    http://ubuntuhandbook.org/index.php/2016/05/time-differences-ubuntu-1604-windows-10/ For users who d ...

  3. Linux运维---16. Kolla部署OpenStack外接rabbit集群

    # 前提时rabbit集群已经搭建完成 vim /etc/kolla/globals.yml enable_rabbitmq: "no" rpc_transport_url: &q ...

  4. 配置maven时,报JAVA_HOME错误

    其实原因很简单,是之前java的jdk配置不合规范! 一.我是win10系统. 二.我的java jdk放在D盘,环境变量里,JAVA_HOME是D:\Program Files\Java\jdk1. ...

  5. C语言回文链表

    要求:请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true思路:利用快慢双指针+反转半链 ...

  6. P3391 【模板】文艺平衡树

    模板题 link Splay 区间翻转,存个代码 旋转时,要注意goal是引用 , 并记得修改 , 有标记的一定记得标记下放 , 还有清空 #include<iostream> #incl ...

  7. SpringBoot--application.yml

    application.properties 配置了端口号:9090 application.yml 也配置了端口号:8080 SpringBoot使用9090,以属性为主 1.在applicatio ...

  8. Java TreeSet集合 比较器排序Comparator的使用

    比较器排序Comparator的使用 存储学生对象,并遍历,创建TreeSet集合使用带参构造方法 要求,按照学生年龄从小到大排序,如果年龄相同,则按照姓名的字母循序排序 结论 用TreeSet集合存 ...

  9. 获取 Android APP 版本信息工具类(转载)

    获取 Android APP 版本信息工具类 获取手机APP版本信息工具类 1.获取版本名称 2.获取版本号 3.获取App的名称 package com.mingyue.nanshuibeidiao ...

  10. Paper: ModelarDB

    Problem: how to store and querry massive amounts of high quality sensor data ingested in real-time f ...