#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. MPI Maelstrom POJ - 1502 floyd

    #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> usin ...

  2. ansible笔记(15):循环(二)with_items/with_list/with_together/with_flattened

    嵌套的列表(序列中的序列),示例如下: --- - hosts: 192.168.10.2 remote_user: root gather_facts: no tasks: - debug: msg ...

  3. Date/Math/String对象的函数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Docker学习(六)Dockerfile构建自定义镜像

    Docker学习(六)Dockerfile构建自定义镜像 前言 通过前面一篇文章可以知道怎么去使用一个镜像搭建服务,但是,如何构造自己的一个镜像呢,docker提供了dockerfile可以让我们自己 ...

  5. 使用shader,矩阵旋转实现图片的旋转动画

    常用于loading动画之类的 具体的实现代码: fixed4 frag (v2f i) : SV_Target { //1.先将uv平移到原点(让图片中心与原点重合) float2 pianyi=( ...

  6. tkinter页面卡死

    tkinter界面卡死的解决办法   1.如果点击按钮,运行了一个比较耗时的操作,那么界面会卡死 import tkinter as tk import time def onclick(text, ...

  7. Js 事件委托 解决动态元素不能click点击的问题

    参考教程地址 https://blog.csdn.net/xiaolong20081/article/details/79792137 不想写了.直接看上面就行 采用事件委托或代理方式绑定 $(doc ...

  8. java-日期取特定值

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * @author G ...

  9. Linux 配置mysql 远程连接

    1.首先用root用户登录mysql mysql -u root -p 2.新建用户 use mysql; select host,user from user;(查看现有用户) CREATE USE ...

  10. sql查询 —— 模糊查询

    --模糊查询 --like --%至少替换一个 -- _只替换一个 -- 查姓李的人 select *from student name like "李%"; -- 查名为杰伦的人 ...