Opencv图像轮廓提取

  • 0. 实现结果如下:
  • 1. 打开图像代码
  • 2. 轮廓提取函数
  • 3. 代码实现

本文主要实现了图像的轮廓提取,首先先给出直观的轮廓实现结果:

0. 实现结果如下:



1. 打开图像代码

注意图片存放路径不能出现中文,不然会报错!

 CString defaultDir = _T("请选择路径"); //设置默认打开文件夹CString fileFilter = _T("文件(*.jpg;*.bmp)|*.jpg;*.bmp|All File (*.*)|*.*||"); //设置文件过滤CFileDialog fileDlg(true, defaultDir, _T(""), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, fileFilter, NULL);//弹出选择文件对话框if (fileDlg.DoModal() == IDOK){filePath = fileDlg.GetPathName();//得到完整的文件名和目录名拓展名  CString filename = fileDlg.GetFileName();}char * A = CStringToChar(filePath); //CString转换CharMat image = imread(A, 1);imshow("image", image);

2. 轮廓提取函数

寻找轮廓函数:findContours()

//函数原型:
void findContours//提取轮廓,用于提取图像的轮廓
(
InputOutputArray image,//输入图像,必须是8位单通道图像,并且应该转化成二值的
OutputArrayOfArrays contours,//检测到的轮廓,每个轮廓被表示成一个point向量
OutputArray hierarchy,//可选的输出向量,包含图像的拓扑信息。其中元素的个数和检测到的轮廓的数量相等
int mode,//说明需要的轮廓类型和希望的返回值方式
int method,//轮廓近似方法
Point offset = Point()
)

绘制轮廓函数: drawContours()

//函数原型:
void drawContours//绘制轮廓,用于绘制找到的图像轮廓
(InputOutputArray image,//要绘制轮廓的图像InputArrayOfArrays contours,//所有输入的轮廓,每个轮廓被保存成一个point向量int contourIdx,//指定要绘制轮廓的编号,如果是负数,则绘制所有的轮廓const Scalar& color,//绘制轮廓所用的颜色int thickness = 1, //绘制轮廓的线的粗细,如果是负数,则轮廓内部被填充int lineType = 8, /绘制轮廓的线的连通性InputArray hierarchy = noArray(),//关于层级的可选参数,只有绘制部分轮廓时才会用到int maxLevel = INT_MAX,//绘制轮廓的最高级别,这个参数只有hierarchy有效的时候才有效//maxLevel=0,绘制与输入轮廓属于同一等级的所有轮廓即输入轮廓和与其相邻的轮廓//maxLevel=1, 绘制与输入轮廓同一等级的所有轮廓与其子节点。//maxLevel=2,绘制与输入轮廓同一等级的所有轮廓与其子节点以及子节点的子节点Point offset = Point()
)

3. 代码实现

完整的C++与Opencv代码实现如下:

#include "opencv/highgui.h"
#include "opencv/cv.h"
using namespace cv;void main()
{// TODO:  在此添加控件通知处理程序代码CString defaultDir = _T("请选择路径"); //设置默认打开文件夹CString fileFilter = _T("文件(*.jpg;*.bmp)|*.jpg;*.bmp|All File (*.*)|*.*||"); //设置文件过滤CFileDialog fileDlg(true, defaultDir, _T(""), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, fileFilter, NULL);//弹出选择文件对话框if (fileDlg.DoModal() == IDOK){filePath = fileDlg.GetPathName();//得到完整的文件名和目录名拓展名  CString filename = fileDlg.GetFileName();}char * A = CStringToChar(filePath); //CString转换CharMat image = imread(A, 1);imshow("image", image);Mat gray;cvtColor(image, gray, CV_BGR2GRAY);GaussianBlur(gray, gray, Size(3, 3), 3, 3);Mat img;threshold(gray, img, 100, 255, THRESH_BINARY);imshow("二值", img);vector<vector<Point>> contours;vector<Vec4i> hierarchy;findContours(img, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);Mat resultImage = Mat::zeros(img.size(), CV_8UC3);drawContours(resultImage, contours, -1, CV_RGB(0, 20, 180),3);imshow("resultImage", resultImage);}

图像轮廓提取算法(Opencv基于C++实现)相关推荐

  1. 一种新型鱼眼图像轮廓提取算法

    from: http://www.scimao.com/read/2307651     摘 要:提取鱼眼图像轮廓是利用鱼眼图像的前提.传统提取鱼眼图像轮廓的扫描线逼近法对噪点抑制能力不强,精度差.本 ...

  2. 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  3. 《OpenCv视觉之眼》Python图像处理十四 :Opencv图像轮廓提取之Scharr算法和Canny算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  4. Zhang-Suen 图像骨架提取算法的原理和OpenCV实现

    记录一下图像骨架提取算法,转载至 两种图像骨架提取算法的研究(1)原理部分 基于OpenCV的实现代码如下,代码部分参考 opencv骨架提取/图像细化 void thinImage(Mat & ...

  5. Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法

    Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法 原文:Win8 Metro(C#)数字图像处理--2.40二值图像轮廓提取算法  [函数名称] 二值图像轮廓提取      ...

  6. 我的Qt作品(7)使用Qt+OpenCV实现图像轮廓提取,再用三阶贝塞尔曲线拟合成光滑线条/多边形拟合

    一.贝塞尔曲线基础知识 给一系列顶点,如果只是用直线将其中的各个点依次连接起来,最终形成一个折线图,这种很容易实现.但是现实中事物的变化往往具有连续的特性,即使是给定了一系列离散的点,基于以往的生活经 ...

  7. 图像的论轮廓提取算法与代码

    第7章 边沿检测与提取,轮廓跟踪 我们在第三章介绍平滑与锐化时引入了模板操作,今天还要用到它. 7.1 边沿检测 我们给出一个模板  和一幅图象  .不难发现原图中左边暗,右边亮,中间存在着一条明显的 ...

  8. 两种图像骨架提取算法的研究原理及实现

    图像骨架提取,实际上就是提取目标在图像上的中心像素轮廓.说白了就是以目标中心为准,对目标进行细化,一般细化后的目标都是单层像素宽度.比如输入图像是这样: 输出骨架图像(红色) 关于骨架提取,现存的算法 ...

  9. 图像去雨算法(基于卷积网络)

    图像去雨算法文章: https://pdfs.semanticscholar.org/bf10/3b3ea90f0d032d1d73dbb83ae41731ee006f.pdf 相应的代码和论文 ht ...

最新文章

  1. linux mpp集群环境,Linux环境下,DM8-MPP两节点集群搭建
  2. R语言广义加性模型GAMs:可视化每个变量的样条函数、样条函数与变量与目标变量之间的平滑曲线比较、并进行多变量的归一化比较、测试广义线性加性模型GAMs在测试集上的表现(防止过拟合)
  3. node 升级_技术周刊( Node.js 12 性能大提升 2019-04-30)
  4. javaee校园信息服务器,基于javaEE服务器 学生考勤管理系统的设计与实现开题报告...
  5. js原生代码编写一个鼠标在页面移动坐标的检测功能,兼容各大浏览器
  6. jq处理返回来json_JQuery ajax返回JSON时的处理方式 (三种方式)
  7. python拦截数据包_使用Python进行TCP数据包注入(伪造)
  8. pytorch view()函数
  9. windscribe使用方法详细指导【新手入门手把手教程】
  10. React项目实现导出PDF的功能
  11. ECSHOP整合第三方登录,QQ登录、新浪微博登录、支付宝登
  12. 上海python暑假培训班
  13. 网络学习 局域网分类 以太网 令牌网 FDDI光纤分布式数据接口网 异步传输模式网(ATM) 无线局域网
  14. 吴恩达机器学习系列15:学习曲线
  15. 高通骁龙410系列-MSM8916(M9+) ( Cortex-A53架构)
  16. 幻方构造方法及C语言实现
  17. 算法学习系列(贪心算法)—机器人攀登问题
  18. Android攻城狮fragment
  19. 2021-08-30-全排列-逆序数-排列的奇偶性
  20. 可爱女生开糖果花店,她两年时间就挣了一百万元

热门文章

  1. 关于换行以及换行属性
  2. 硕士毕业去一线城市的企业好,还是去三线城市做公务员好?
  3. Golang Tools
  4. 仿b站的动漫视频网站
  5. 数据分析师 知识体系 业务篇
  6. 《闻官军收河南河北》 杜甫
  7. ClickHouse快速安装-可视化工具连接-创建第一个ck库表(一)
  8. 【智慧家科教2023新春首训】东方昱老师畅谈新发展之路:前途是光明的 未来是可期的
  9. 29(将数字字符串转换成数字)
  10. ManyPixels 插画素材分享