OpenCV学习之图像轮廓提取

OpenCV入门11:轮廓提取和形状识别 根据不同形状的特征,使用适当的函数和算法进行识别,并可针对需要的特征进行进一步的处理和分析。通过形状匹配方法,可以将待识别的形状与已知形状进行比较,来确定形状的类别。这些特征可以用于识别不同形状的轮廓。该函数可以帮助你找到图像中的圆形轮廓,并返回识别到的圆形的圆心和半径。使用几何矩方法可以计算轮廓的矩,并利用矩的特征来识别不同的形状,如面积、宽高比、中心距等。除了前面提到的基于多边形逼近的方法外,还有一些常用的形状识别算法可以应用于轮廓识别。该函数可以检测图像中的直线轮廓,并返回检测到的直线的参数。 阅读详情
#include "highgui.h"  
#include "cv.h"  
#include <iostream>   

using namespace std;  

int main()  
{  
	int i=0;  
	int mode = CV_RETR_CCOMP;//设置提取轮廓模式  
	int contours_num=0;//提取轮廓的数目  
	CvScalar external_color;//绘制轮廓线的颜色  
	CvScalar hole_color;  
	CvMemStorage *storage = cvCreateMemStorage(0);  
	CvSeq *contours =0;//存储提取的轮廓图像  

	IplImage *pImg = NULL;  
	IplImage *pContourImg = NULL;//显示提取的轮廓图像  
	IplImage *src=cvLoadImage("E:/Code/filter_image.bmp",1);  

	pImg = cvCreateImage(cvGetSize(src),src->depth,1);  
	pContourImg =cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);  
	cvCvtColor(src,pImg,CV_BGR2GRAY);//将读取的图像转化为灰度图像  
	cvNamedWindow("src",1);  
	cvNamedWindow("contour",1);  
	cvShowImage("src",src);//显示原图  
	cvThreshold(pImg,pImg,200,255,CV_THRESH_BINARY);//二值化  
	mode = CV_RETR_LIST;  
	contours_num=cvFindContours(pImg,storage,&contours,sizeof(CvContour),mode,CV_CHAIN_APPROX_NONE);  
	cout<<contours_num<<" "<<endl;//打印找到的轮廓的数目  
	for (;contours!=0;contours=contours->h_next)  
	{  
		hole_color=CV_RGB(rand()&255,rand()&255,rand()&255);  
		external_color = CV_RGB(rand()&255,rand()&255,rand()&255);  
		cvDrawContours(pContourImg,contours,external_color,hole_color,1,2,8);  
	}  

	cvShowImage("contour",pContourImg);  
	cvWaitKey(0);  
	cvReleaseImage(&src);  
	cvReleaseImage(&pImg);  
	cvReleaseImage(&pContourImg);  
	cvReleaseMemStorage(&storage); 
	return 0;
}  

本文转载于http://www.cnblogs.com/gnuhpc/archive/2012/07/02/2573806.html

另一个利用findContours()的版本demo:http://blog.sina.com.cn/s/blog_662c78590100z0rg.html

贴在这里备用学习。


如何在OpenCV中实现图像的边缘检测和轮廓提取?opencv教程 以上是在OpenCV中实现图像的边缘检测和轮廓提取的简要介绍。根据具体的需求和图像特点,可以选择适合的方法和参数进行调整,以获得更好的结果。希望以上介绍能够帮助你理解如何使用OpenCV实现图像灰度化和二值化操作。这些是图像处理中常见的基础操作,OpenCV还提供了更多丰富的图像处理功能,可以用于实现更复杂的图像处理任务。 阅读详情

相关推荐

提取图像轮廓--findContours函数、drawContours函数

提取图像轮廓   学习【OpenCV入门教程之六】创建Trackbar & 图像对比度、亮度值调整---记录 今天学习到@浅墨_毛星云博主的学习【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整,再此我将自己遇到的问题进行记录 中间引用了一些博客的内容: http://blog.youkuaiyun.com/dcrmg/article/details/51987348

lindazhu520的博客 1489

7.OpenCV-图像轮廓

CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)。CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部,也就是,函数只保留他们的终点部分。RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部份的外部边界,第二层是空洞的边界。遍历轮廓,通过计算面积比,就可以找到轮廓特征,也就筛选出我们感兴趣的轮廓了。RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次(常用这个)RETR_EXTERNAL:只检最外面的轮廊。

清山博客 3636

OpenCV实战系列——轮廓检测详解

在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。本节中,我们首先介绍如何提取图像中轮廓,然后讲解如何计算轮廓的形状描述符。

m0_58523831的博客 2万+

【opencv】(6) 图像轮廓处理

各位同学好,今天和大家分享一下opencv中如何获取图像轮廓,以及对轮廓的一些其他操作。内容有: (1)轮廓检测:cv2.findContours();(2)轮廓绘制:cv2.drawContours();(3)轮廓近似:cv2.approxPolyDP();(4)面积计算:cv2.contourArea();(5)周长计算:cv2.arcLength();(6)外接矩形:cv2.rectangle();(7)外接圆:cv2.circle() 在开始前,先导入需要用到的库文件以及图像数据,定义一个图像显

博观而约取,厚积而薄发 9274

OpenCV中的轮廓绘制与分析实战

OpenCV是一个开源的计算机视觉库,它包含大量用于图像处理和计算机视觉的函数。由于其性能优秀和易于使用,被广泛应用于学术界和工业界。函数允许用户自定义轮廓的颜色和厚度。这是通过函数的第四个参数来设置轮廓的颜色,第五个参数来设置轮廓的厚度实现的。在实际应用中,你可以根据特定的需求来设定这些参数。在二维空间中,凸包可以被理解为最简化的外围边界,它刚好包含了一组点集。直观上来说,如果我们有一组散乱的点,通过连接这些点,使得形成的多边形边界内的所有点都包含在内,那么这个最小多边形即为凸包。

weixin_26854475的博客 760

读取并可视化DICOM图像(VTK & OpenCV) - louishao的博客 - 优快云博客1

本人处理的CT图的格式是DICOM格式,这个用OpenCV不能直接读取,我采用了VTK进行读取,然后用OpenCV处理的思路(当然网上也有人说可以直接用ITK读

OpenCV学习——图像轮廓的提取和绘制

本文已搬家至【OpenCV学习】图像轮廓的提取和绘制

gnuhpc的专栏 3705

opencv3/C++轮廓的提取与筛选方式

今天小编就为大家分享一篇opencv3/C++轮廓的提取与筛选方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

【OpenCV学习】图像轮廓的提取和绘制

#include "highgui.h" #include "cv.h" #include <iostream> #include <iomanip> using namespace std; int main(void) { int i=0; int mode = CV_RETR_CCOMP;//设置提取轮廓模式 int contours_n...

天下对手教会少林武僧 335

Xilinx ZYNQ 7000学习笔记二(FSBL代码分析启动-汇编代码)

Xilinx ZYNQ 7000学习笔记

u011116085的博客 4246

BLE天线设计避坑:NRF52832官方50欧姆阻抗匹配的3个常见误区

本文深入解析NRF52832蓝牙SoC天线设计中的常见误区,重点探讨50欧姆阻抗匹配的3个关键问题:PCB板材介电常数差异、匹配元件寄生参数及VSWR测试。通过实测数据和优化方案,帮助工程师规避设计陷阱,提升BLE通信性能。

beer8的博客 214

OpenCV与AI深度学习 | 使用OpenCV轮廓检测提取图像前景

前景提取是计算机视觉领域中非常流行的任务。使用前景提取方法,我们尝试提取任何我们感兴趣的图像或对象,并丢弃其余的背景。最近基于深度学习的图像分割技术使这变得非常容易。但我们也可以使用纯计算机视觉技术来实现这一点。

csdn_xmj的博客 2049

Unity+Hybridclr发布WebGL记录

问题不多,比预想中的顺利,如果遇到问题建议先看Hybridclr的常见问题里面有没有解决方案,没遇到Hybridclr的报错,所以记录的问题里面没有Hybridclr相关的。导出设置里的压缩格式选择了Brotli,而服务器或浏览器不支持,据说是可以拓展服务器配置使支持Brotli,但是由于我本人是IIS小白,所以换了种压缩格式,在publishing Settings修改Compression Fromat为Gzip。3.在浏览器运行之后视图一直闪烁。,修改配置,这个网上很常见。

a598211757的博客 1037

Opencv学习笔记(八) 提取图像轮廓基础操作

经过两周opencv的学习,对opencv有了一些自己的理解和心得,总结出一套较为实用提取图像轮廓的方法。 操作步骤: 1、图像锐化。 图像锐化的目的是为了要增强图像中对比度,这样可以使提取轮廓的效果,让轮廓显现的更明显。 这里我们使用拉普拉斯算子遍历图像,预先定义矩阵: Mat kernel = (Mat_(3, 3) << 1, 1, 1, 1, -8, 1, 1, 1, 1); ...

Rosen的博客 3005

单节锂电池充电管理芯片应用原理阐述及应用领域

当电池电压超过2.9V时,采用恒流模式对电池充电,充电电流由PROG 管脚和GND之间的电阻RPROG确定。充电电压固定于4.2V,而充电电流可通过一个电阻器进行外部设置当充电电流在达到最终浮充电压之后降至设定值1/10时,WD4054将自动终止充电循环。在待机模式中,WD4054 对 BAT 引脚电压进行监控,只有当 BAT 引脚电压低于再充电阈值电压4.1V时(对应电池容量80%~90%),才会开始新的充电循环,重新对电池进行充电,这就避免了对电池进行不必要的反复充电,有效延长电池的使用寿命。

weixin_41141180的博客 943

新手也能懂的Simulink汽车二自由度建模:从公式推导到模型搭建全流程

本文为新手提供了在Simulink中搭建汽车二自由度模型的完整实战指南。文章从模型核心概念讲起,详细讲解了如何将车辆动力学方程转化为状态空间模型,并逐步指导在Simulink中实现从参数设置、模块搭建到仿真验证的全过程。通过阶跃转向测试和参数影响分析,帮助读者直观理解车辆转向特性,并提供了实用的模型扩展思路与常见问题排查技巧。

weixin_29047919的博客 213

opencv学习笔记12 图像轮廓的提取和绘制

http://www.cnblogs.com/gnuhpc/archive/2012/07/02/2573806.html #include "highgui.h" #include "cv.h" #include #include using namespace std; int main(void) { int i=0; int mode = CV_RETR_CCOM

shouhouxiaomuwu的专栏 1440

将赛灵思 SDK 工程移植到 Vitis 的分步指南

注:本文转自赛灵思中文社区论坛,源文链接在此。本文原作者为XILINX工程师。 以下为个人译文,仅供参考,如有疏漏之处,还请不吝赐教。 您是赛灵思软件开发套件 (SDK) 用户吗? 您是否正在计划将自己的工程移植到 Vitis 软件平台? 那么本篇工程移植分步指南将能祝您一臂之力。 从 2019.2 版开始,赛灵思 SDK 开发环境已统一整合到全功能一体化的 Vitis™ 统一软件平台中。 尊敬的 SDK 用户,您只需轻点几下鼠标即可体验这一功能丰富的工具! 马上开始将工程从赛灵思 S

weixin_45825101的博客 1731

Python学习笔记十之Opencv图像处理:阈值、滤波、形态学、梯度、轮廓提取、FFT

python-opencv基本的图像处理算法运用

yohnyang的博客 839

由ip地址和子网掩码求网络号、主机号、广播地址(超详细)

1、用二进制数表示IP地址   在进行计算之前,我们首先要学会十进制的IP地址怎么转换为二进制的IP地址。   给出一个例子: 十进制:172.16.25.3 二进制:10101100.00010000.00011001.00000011 1、如果两台主机的网络号相同,我们就说它们是同一网段 2、主机号的意义 - 1)主机号部分全变成1,即为该网段的广播地址 - 2)主机号部分全变成0,即为该网段的网路地址(网络号) 3、如果主机号部分为x位,则该网络能容纳最大主机数为: 2的x次方-2。减2

爱吃雪糕的小布丁的博客 9万+

72、海洋地理信息系统:电子海图的全面解析

本文全面解析了海洋地理信息系统中的电子海图技术,从AIS数据的应用、电子海图数据的存储与显示,到电子导航的发展趋势和S-100通用水文数据模型的推广,系统地阐述了电子海图在现代航海中的核心作用及其未来发展方向。

hhh00的博客 252
上一篇: DLL封装学习记录
下一篇: Visual Studio 之 Team Foundation Sever(一)
WTK-CV
博客等级 码龄16年 48粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值