【OpenCv 4 Python 3.7】轮廓发现

Python+OpenCV3简单手势识别 文章目录安装相关库原理简述代码效果实现 今天教大家一个有趣的玩法,如何利用Python+opencv3实现简单的手势识别。当然网上也有相关教程,但绝大多数给出的代码拿来之后你是不能直接用的,这对于拿来主义的同学来说简直太“禽兽”了。所以今天我也会给出所有代码,只要配置好环境就可以运行。话不多说接下来就进入正题。 安装相关库 这个安装库的重要性就不用我多说了,但凡是想直接用人家的代码,就要安装人家运行所需的全部库。 pip install opencv-python pip install opencv 阅读详情

轮廓发现—是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现的结果。

介绍两种API使用:

-cv.findContours 发现轮廓

-cv.drawContours 绘制轮廓

一.Opencv发现轮廓的函数为:

findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchy
各参数含义:
1、image参数表示8位单通道图像矩阵,可以是灰度gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY),
但更常用的是二值图像ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU),一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值图像。
2、mode参数表示轮廓检索模式:
①CV_RETR_EXTERNAL:只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略。
②CV_RETR_LIST:检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立,没有等级关系,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓。
③CV_RETR_CCOMP:检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层,若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层。
④CV_RETR_TREE:检测所有轮廓,所有轮廓建立一个等级树结构,外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。
3、method参数表示轮廓的近似方法:
①CV_CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max (abs (x1 - x2), abs(y2 - y1) == 1。
②CV_CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息。
③CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法。

4、contours参数是一个list,表示存储的每个轮廓的点集合。
5、hierarchy参数是一个list,list中元素个数和轮廓个数相同,每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为负数。
6、offset参数表示每个轮廓点移动的可选偏移量。

二.Opencv绘制轮廓的函数为:

drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) -> image
各参数含义:
1、imgae参数表示目标图像。
2、contours参数表示所有输入轮廓。
3、contourIdx参数表示绘制轮廓list中的哪条轮廓, 如果是负数,则绘制所有轮廓。
4、color参数表示轮廓的颜色。
5、thickness参数表示绘制的轮廓线条粗细,如果是负数,则填充轮廓内部。
6、lineType参数表示线型。
7、hierarchy参数表示有关层次结构的可选信息。
8、maxLevel参数表示绘制轮廓的最大级别。 如果为0,则仅绘制指定的轮廓。 如果为 1,则该函数绘制轮廓和所有嵌套轮廓。如果为2,则该函数绘制轮廓,所有嵌套轮廓,所有嵌套到嵌套的轮廓,等等。 仅当有可用的层次结构时才考虑此参数。
9、offset参数表示可选的轮廓偏移参数,该参数可按指定的方式移动所有绘制的轮廓。

代码实现:

#二值化和边缘提取要根据实际要操作的图像来选取,多尝试,

#还有函数里面的参数也要调整适应

import cv2 as cv
import numpy as np

#边缘提取
def edge_demo(image):
    blurred = cv.GaussianBlur(image, (3, 3), 0)
    gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)
    # X Gradient
    xgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
    # Y Gradient
    ygrad = cv.Sobel(gray, cv.CV_16SC1, 0, 1)
    #edge
    #edge_output = cv.Canny(xgrad, ygrad, 50, 150)
    edge_output = cv.Canny(gray, 30, 100)
    cv.imshow("Canny Edge", edge_output)
    return edge_output


def contours_demo(image):
    """dst = cv.GaussianBlur(image, (3, 3), 0)
    gray = cv.cvtColor(dst, cv.COLOR_BGR2GRAY)
    #二值化
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
    cv.imshow("binary image", binary)"""
    binary = edge_demo(image)
    #contours:轮廓  heriachy:层次信息
    contours, heriachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
    for i, contour in enumerate(contours):
        #cv.drawContours(image, contours, i, (0, 0, 255), -1) #将轮廓里面填充
        cv.drawContours(image, contours, i, (0, 0, 255), 2)
        approxCurve = cv.approxPolyDP(contour, 4, True)
        if approxCurve.shape[0] > 6:
            cv.drawContours(image, contours, i, (0, 255, 255), 2)
        if approxCurve.shape[0] == 4:
            cv.drawContours(image, contours, i, (255, 255, 0), 2)
        print(approxCurve.shape[0])
        print(i)
    cv.imshow("detect contours", image)


print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/vcprojects/images/blob.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
contours_demo(src)
cv.waitKey(0)

cv.destroyAllWindows()

结果:

在这里插入图片描述

OpenCV-Python实战(11)——OpenCV轮廓检测相关应用 在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,我们将学习如何利用获取到的轮廓,进行形状分析以及对象检测和识别。 阅读详情

相关推荐

OpenCV-Python实战(10)——详解 OpenCV 轮廓检测

在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,将首次通过简单示例了解轮廓的基本概念,然后通过实际示例来了解如何检测和压缩轮廓,最后利用介绍如何利用图像矩描述检测到的轮廓属性。

盼小辉丶的博客 3万+

OpenCV4-python 学习笔记 之 图像轮廓

1 查找并绘制图像轮廓 一个轮廓对应一系列的点,在OpenCV中提供函数cv2.fingContours()用于查找图像轮廓。 并可以根据参数返回特定的轮廓曲线,而函数cv2.drawCountours()可以将轮廓绘制到图像上。 1.1 函数介绍 1.1.1 cv2.findContours() 查找图像轮廓: cv2.findContours() 的语法格式如下 : image,contou...

k903161661的博客 2606

【学习OpenCV4】轮廓查找与绘制总结

本文分享内容来自图书《学习OpenCV 4:基于Python的算法实战》,该书内容如下: 第1章 OpenCV快速入门; 第2章 图像读写模块imgcodecs; 第3章 核心库模块core; 第4章 图像处理模块imgproc(一); 第5章 图像处理模块imgproc(二); 第6章 可视化模块highgui; 第7章 视频处理模块videoio; 第8章 视频分析模块video; 第9章 照片处理模块photo; 第10章 2D特征模块features2d; 第11章 相机标定与三维重建模块calib

lxiao428的博客 4981

阿菊的OpenCv4——轮廓检测函数cv2.findContours详解

阿菊的OpenCv——一分钟学会cv2.findContours函数函数参数:返回值 e.g. image, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 提取二值化图像的轮廓信息。 函数参数: thresh:输入图像 cv2.RETR_TREE:层次类型 cv2.CHAIN_APPROX_SIMPLE:轮廓逼近方法 返回值 image:修改后的图像 contours:图像

fuhao7i的博客 2628

【图像处理】——Python+opencv实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(findcontours函数和contourArea函数)

转载请注明本函数文详细地址 本文讲解了opencv自带轮廓跟踪以及绘制轮廓的函数 本文讲解了一种基于链码的一种轮廓检测方法 本文一到四部分转载至:《opencv cv.findContours 函数详解》

python_AI_fans的博客 8864

科研作图不发愁:手把手教你用PyMOL给蛋白-DNA互作图‘美颜’(附完整配色与标注方案)

本文详细介绍了如何使用PyMOL对蛋白-DNA互作结构图进行专业美化,包括从PDB文件加载、结构展示与标注、互作位点突出显示到高质量渲染输出的完整流程。通过具体案例(PDB ID:8SSS)演示了锌指结构域区分、关键残基标注和互作距离测量等实用技巧,帮助科研人员制作可直接用于期刊投稿的高质量示意图。

weixin_42523792的博客 554

【Opencv4快速入门】轮廓检测findContours

图像轮廓是指图像中对象的边界,是图像目标的外部特征,这个特征对于图像分析、目标识别和理解更深层次的含义具有重要的作用。

AI Chen的博客 524

论文笔记:基于对比学习的半监督分类学习方法

论文阅读笔记_CCSSL

weixin_46224126的博客 3316

Python开发:OpenCV版本差异所引发的cv2.findContours()函数传参问题

一、问题如下:   cv2.findContours()这个方法是用来找出轮廓值的: # cv2.findContours找出轮廓值,cv2.RETR_EXTERNAL表示图像的外轮廓 binary, contours, h = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)   但是在运行时...

weixin_30907523的博客 854

AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事?

AXI总线的transaction是burst-based的,因此有必要好好研究一下不同burst type的工作原理。此处略过burst的定义以及burst size、burst length等信号的介绍。

qiuzhongyu123的博客 2万+

ASReview:基于主动学习的AI文献筛选工具,提升科研效率

主动学习是机器学习的一个重要分支,其核心原理是让算法能够主动选择最有价值的数据进行标注,从而以更低的成本获得更好的模型性能。这一技术通过人机协作的闭环流程,显著提升了数据标注和模型训练的效率和精度。在工程实践中,主动学习尤其适用于数据标注成本高昂或数据类别不平衡的场景,例如医学影像分析、自然语言处理中的文本分类以及推荐系统的冷启动问题。通过优先标注模型最不确定的样本,它能够有效解决传统机器学习面临的冷启动和数据稀疏性挑战。本文聚焦的ASReview项目,正是将主动学习原理应用于系统文献综述这一具体场景,通过

weixin_28725959的博客 432

OpenCV-Python教程(11、轮廓检测)

相比C++而言,Python适合做原型。本系列的文章介绍如何在Python中用OpenCV图形库,以及与C++调用相应OpenCV函数的不同之处。这篇文章介绍在Python中使用OpenCV的检测并绘制轮廓。

sunny2038的专栏 19万+

[SoC]SoC验证中bootcode与firmware相关验证经验总结

本文总结了SoC验证中bootcode和firmware的验证经验。重点介绍了两种数据加载方法:1)使用Verilog系统函数$readmemh/$readmemb直接写入ROM/ARAM,需注意文件路径、格式和斜杠方向;2)通过Memory Hierarchy在initial块中操作,需要添加适当延时并注意路径拼接。文章还提供了在testcase phase中先读取数据到HASH再写入SRAM的示例,并强调加载后需使能edc_bypass以避免ECC错误。验证过程中需特别注意文件位置、格式要求及路径处理等

元直的博客 2498

Opencv基于Python图像轮廓——轮廓绘制及其特征

轮廓入门目标1. 什么是轮廓2. 如何绘制轮廓3. 轮廓近似方法 目标 在本篇文章中,我们将学习到以下内容: 了解轮廓是什么 学习查找轮廓,绘制轮廓等 你将学到以下函数:cv.findContours(),cv.drawContours() 1. 什么是轮廓 轮廓可以简单地解释为连接具有相同颜色或强度的所有连续点(沿边界)的曲线,轮廓是用于形状分析以及对象检测和识别的有用工具。 为了获得更高的准确性,请使用二进制图像。因此,在找到轮廓之前,请应用阈值或canny边缘检测。 从OpenCV 3.2开始,

DIPDWC的博客 1万+

ROS从入门到精通2-7:Gazebo仿真之动态生成障碍物

动态生成障碍物在机器人导航、碰撞避障算法测试、多机协同等领域应用广泛,可以帮助开发人员快速测试,本文介绍该技术并提供基于ROS Gazebo的实现

FRIGIDWINTER的博客 4899

【RT-DETR涨点改进】全网独家首发、注意力改进篇 | ICLR 2026 | 引入 MHLA 多头线性注意力,关注不同的上下文区域,弥补卷积的长程依赖建模方面的不足,助力高效涨点,来自北京大学

🔥本文提出MHLA多头线性注意力模块,用于改进RT-DETR目标检测网络。MHLA通过恢复线性注意力的表达能力,在保持线性复杂度的同时,为网络提供高效的全局上下文建模能力。该方法解决了传统线性注意力在长序列建模中的"全局上下文坍塌"问题,使不同空间位置能关注不同上下文区域。实验表明,MHLA显著提升了RT-DETR在复杂背景、小目标和遮挡场景下的检测性能,且不增加显著计算开销。文章详细介绍了MHLA的原理、优势及8种改进方案,并提供了完整的代码实现和配置指南。

Ai缝合怪、助力小伙伴高效发论文 271

Python+OpenCV 简易图像边缘轮廓检测(零基础)

前言 图像的轮廓检测不论是机器视觉还是其他方面都有较大作用,本文将基与Python3.7和OpenCV4.3对静态图像进行轮廓检测。最终以方框的形式框出目标图像。 函数基础与三方库 本文所用的第三方库是Opencv4.3 导入第三方库 import cv2 as cv 由于Opencv显示图像比较麻烦,与matlab或matplob不一致,考虑到基础薄弱可能对此库的图像显示机制不了解,在此我先定义一个img_show函数,目的是更方便的显示图像。 def img_show(pic,name): ''' 此

Syuhen的博客 3102

AgentScope实战训练营- Java从零开始快速构建Agent完整教程

本文基于阿里巴巴开源的 AgentScope Java 框架,从零开始手把手带你构建 AI 智能体应用。内容涵盖环境搭建、基础对话、工具调用、结构化输出、多Agent流水线、Hook可观测性、会话持久化、MCP协议、RAG知识库集成、多模态工具、技能系统、Spring Boot Web部署等21个核心模块,附带完整可运行代码示例,帮助Java开发者快速掌握Agent开发全流程。

program哲学 867

【Python+OpenCV】识别颜色方块并提取轮廓

转载自:【Python+OpenCV】识别颜色方块并提取轮廓_See_Star的博客-优快云博客 【Python+OpenCV】识别颜色方块并提取轮廓 望天边星宿 2019-11-13 11:50:53 15498 正在上传…重新上传取消​ 收藏 267 分类专栏: Python OpenCV 文章标签: OpenCV Python 图像识别 版权 ​Python 同时被 2 个专栏收录 61 篇文章 2 订阅 订阅专栏 ​OpenCV 7 篇文章 1 订阅 订阅专栏 ...

自主无人机 PX4 ROS SLAM 路径规划 MVS等技术分享 7488

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OpenCV—轮廓操作一站式详解:查找/筛选/绘制/形状描述与重心标注(Python版)

OpenCV—轮廓操作一站式详解:查找/筛选/绘制/形状描述与重心标注(Python版) 为了方便使用的Python同学,将上一篇文章用Python重写了一遍,其中一些OpenCV的Python接口说明将后续持续更新。 轮廓是定义或限定形状或对象的边或线,是机器视觉中的常用的概念,多用于目标检测、识别等任务。关于OpenCV轮廓操作,尤其是级别及如何使用轮廓级别进行筛选等问题,相关文章比较...

iracer的博客 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OpenCV基于Python图像轮廓——轮廓属性

轮廓属性目标1. 常见的轮廓属性1.1 长宽比1.2 范围1.3 坚实度1.4 等效直径1.5 方向1.6 掩码和像素点1.7 最大值,最小值及其位置1.8 平均颜色或平均强度1.9 极端点2. 更多属性2.1 凸性缺陷2.2 点多边形测试2.3 形状匹配 目标 在上一篇文章Opencv基于Python图像轮廓——轮廓绘制及其特征中,我们已经学习到了轮廓的一些特征,如质心、面积、周长等。在本篇文章,我们将继续学习到以下内容: 提取一些常用的物体属性,如坚实度,等效直径,掩模图像,平均强度等 图像轮廓的凸性

DIPDWC的博客 1481

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

opencv寻找轮廓 python_基于opencv的轮廓匹配算法:python代码实现

写在前⾯模式识别领域有⼀个经典问题:边缘轮廓提取。轮廓提取是很多算法的基础,例如霍夫直线检测、霍夫圆检测、snake主动轮廓模型等。在轮廓提取后,为了加快算法的效率,通常会对轮廓进⾏过滤,去掉不需要的噪声轮廓,这⼀步往往使⽤的⽅法就是轮廓匹配。轮廓匹配算法的强⼤远远不⽌于此,在图像纹理信息较简单的情况下,可以使⽤轮廓匹配算法直接找到⽬标,进⾏精确的定位。如图,如何在右图中精准地找到左图的四⻆星?本...

weixin_30118919的博客 2233

OpenCV:图像轮廓检测

本文详细介绍了 OpenCV 中轮廓检测的核心技术,包括轮廓检测的预处理步骤、函数的使用、轮廓绘制方法以及轮廓的各种属性计算与操作(面积、周长、筛选、排序、外接形状、轮廓近似等)。轮廓检测在目标识别、图像分割、物体测量等领域有着广泛的应用,掌握这些基础操作是进行更复杂计算机视觉任务的前提。实际应用中,需要根据具体场景选择合适的轮廓检索模式和近似方法,以达到最佳的检测效果。

2201_75607087的博客 1680

OpenCV基本操作(python开发)——(5)轮廓处理

OpenCV学习基础内容整理,Python开发

qxl_799915的博客 2795

OpenCV - 轮廓特征(Python实现)

矩 图像的矩可以帮助我们计算图像的质心,面积等。 import cv2 import numpy as np img = cv2.imread('image.png',0) ret,thresh = cv2.threshold(img,127,255,0) im,contours,hierarchy = cv2.findContours(thresh, 1, 2) cnt = contours...

C橘子 6130

【OpenCV-Python】:使用OpenCV处理图像并提取轮廓及其矩和面积

学会如何使用OpenCV库来读取图像、转换灰度、二值化、提取轮廓,并计算每个轮廓的矩和面积。

weixin_45477686的博客 5593
上一篇: 【OpenCv 4 Python 3.7】直线检测
下一篇: 【OpenCv4 运行错误】ValueError: not enough values to unpack (expected 3, got 2)
YL_python_C++_java
博客等级 码龄7年 1392粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值