opencv寻找图像外轮廓

二维点集求外轮廓Java_从二维点集重建平面形状-浅议凹包算法 问题背景近期遇到一个计算几何问题,需要从点集中重建一个合理的几何形状。这个问题既有二维的也有三维的,二维的情况相对简单一点,即给出平面区域的一系列散点,求出一定程度上反映这些散点轮廓的平面多边形,给出边的连接方式即可。如从下图的左图散点重建为右图的形状:二维平面散点平面多边形不过这里有一些细节需要注意,必须明确这一系列点的含义,有时给出的点集是表征图形边界的,如左图的情况;有时则是表征图形所覆盖的... 阅读详情

本文展示如何使用opencv中的方法寻找点集的外轮廓
参考:

  1. https://docs.opencv.org/4.0.0/d3/dc0/group__imgproc__shape.html#gadf1ad6a0b82947fa1fe3c3d497f260e0
  2. https://blog.youkuaiyun.com/eric_e/article/details/79591025

1、opencv接口函数:

contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

参数说明:

  1. image:8位单通道2值图像,如果mode参数是 RETR_CCOMP 或者 RETR_FLOODFILL,输入也可以是32-bit integer image of labels (CV_32SC1)。
  2. mode:
    (1) cv.RETR_EXTERNAL只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略
    (2) cv.RETR_LIST   检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立,没有等级关系,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓,所以hierarchy向量内所有元素的第3、第4个分量都会被置为-1。
    (3) cv.RETR_CCOMP  检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层,若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层。
    (4) cv.RETR_TREE, 检测所有轮廓,所有轮廓建立一个等级树结构。外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。
    (5) cv.RETR_FLOODFILL,官方文档中没有说明
  3. method:
    (1) cv.CHAIN_APPROX_NONE 保存物体边界上所有连续的轮廓点到contours向量内
    (2) cv.CHAIN_APPROX_SIMPLE 仅保存轮廓的拐点信息,把所有轮廓拐点处的点保存入contours向量内
    (3) cv.CHAIN_APPROX_TC89_L1 使用Teh-Chin chain approximation algorithm
    (4) cv.CHAIN_APPROX_TC89_KCOS 使用Teh-Chin chain approximation algorithm
  4. contours:轮廓点数(python中该参数保持默认值None即可)
  5. hierarchy:Optional output vector (e.g. std::vector<cv::Vec4i>), containing information about the image topology. It has as many elements as the number of contours. For each i-th contour contours[i], the elements hierarchy[i][0] , hierarchy[i][1] , hierarchy[i][2] , and hierarchy[i][3] are set to 0-based indices in contours of the next and previous contours at the same hierarchical level, the first child contour and the parent contour, respectively. If for the contour i there are no next, previous, parent, or nested contours, the corresponding elements of hierarchy[i] will be negative.(python中该参数保持默认值None即可)
  6. offset:轮廓点相对于原始图像对应点的偏移量,This is useful if the contours are extracted from the image ROI and then they should be analyzed in the whole image context.

2、示例

代码如下

# encoding:utf-8

import numpy as np
import cv2
import matplotlib.pyplot as plt

# 生成数据点
p_list = []
for x in range(150,155):
    for y in range(100, 200):
        p_list.append([x, y])
for x in range(100, 200):
    for y in range(150,155):
        p_list.append([x, y])

im_shape = [300,300]
im_ = np.zeros(im_shape,dtype=np.uint8)
for x,y in p_list:
    im_[x,y] = 255

mode = cv2.RETR_EXTERNAL
method = cv2.CHAIN_APPROX_SIMPLE
contours, hierarchy = cv2.findContours(im_, mode, method)
print(contours)

# 绘制点集和轮廓线
contours = np.squeeze(contours)
plt.scatter(np.array(p_list)[:,0],np.array(p_list)[:,1])
plt.plot(np.array(contours)[:,0],np.array(contours)[:,1],"r")
plt.show()

结果如下图所示,其中蓝色是数据点集,红颜色线条是点集外轮廓。

OpenCV Python 如何找到图像中点与轮廓之间的最短距离? 我们可以使用计算图像上一个点与轮廓之间的最短距离,将轮廓点坐标和点坐标作为参数传递给它。在使用之前,我们需要计算图像中的轮廓。我们可以按照以下步骤来找到给定点与图像中对象轮廓之间的最短距离-使用读取输入图像。使用这种方法读取的RGB图像的格式为BGR。可选地,将读取的BGR图像分配给img。现在,使用下面的函数将此BGR图像转换为灰度图像。可选地将转换后的灰度图像分配给对灰度图像应用阈值处理,将其转换为二进制图像。调整第二个参数()以获得更好的二进制图像。在二进制图像中查找轮廓。将第一个轮廓选择为。 阅读详情

相关推荐

OPENCV之寻找并绘制轮廓以及提取轮廓重心坐标

OPENCV之寻找并绘制轮廓以及提取轮廓中心点

Kevin_Sun777的博客 1万+

OpenCV教程 之 寻找物体的轮廓与凸包:findContours、convexHull函数(C++)

凸包(Convex Hull)是一个计算几何中常见的概念,简单来说,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有点,理解物体形状轮廓的一种比较有用的方法便是计算一个物体的凸包,然后计算其凸缺陷。很多复杂物体的性能能被这种缺陷表示出来

冯良骏 的 博客 3578

平面离散点集外轮廓提取

基于凸包,使用凹点挖掘技术,实现平面离散点集外轮廓提取

Opencv之提取图像轮廓

提取图像轮廓 cv2.findContours(img,mode,method) mode:轮廓检索模式 RETR_EXTERNAL :只检索最外面的轮廓; RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中; RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界; RETR_TREE(最常用):检索所有的轮廓,并重构嵌套轮廓的整个层次;...

cocofisher的博客 1万+

S32K144-EB tresos GPT驱动模块配置详解

GPT通用计时器,在S32K144这款芯片上,有4个外设模块,最多38各通道可以作为GTP的计时器通道,具体详细的大家可以去看芯片手册。这里咱们只管怎么用EB来配置GPT驱动。

小胡同学的工程师学习之路 3863

ubuntu20.04配置UR机械臂的仿真环境

gazebo和rviz中的机械臂的位姿是一样的,要实现同步控制,可以拖动rviz中的球移动到指定位置,点击plan观察路径规划,点击execute执行该路径规划,可以在gazebo和rviz中同步看到刚刚的路径规划运动,实现了简单的机械臂仿真环境搭建。这是因为catkin找的python版本为anaconda下面的版本,所以需要改为指定采用下面的命令,参考之前的。之后要source一下,才能读取到工作空间里的文件,以后每次打开终端进入工作空间都要执行该命令。时,一直不成功,解决办法可以看我之前写的。

weixin_48319333的博客 3492

OpenCV 轮廓提取

轮廓提取——主要针对二值图像 轮廓分为外轮廓和内轮廓 如下图:外轮廓以c开头 内轮廓以h开头 opencv 提供了寻找轮廓的函数 inttotals = cvFindContours(img, storage,&contours,sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_NONE,cvPoint(0,0)); 其中img

IT新秀 1551

C++(Qt)软件调试---Windows下Qt使用dump定位崩溃位置(1)

在C++/Qt程序崩溃时,往往很难找到崩溃的原因,如果是稳定复现的问题还好,但是多数情况遇见的问题是随机出现的,这时想要快速找到问题并解决就需要通过dump文件定位崩溃位置。

mahuifa的博客 1万+

python findcontours_Opencv-python 找到图像轮廓并绘制,cv2.findContours()函数,求轮廓外接矩形,cv2.boundingrect()...

一、查找图像轮廓opencv-python中查找图像轮廓的API为:findContours函数该函数接受二值图作为参数,根据参数,可查找物体外轮廓、内外轮廓,保存轮廓点、压缩等等...如:contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)def findContours(imag...

weixin_34478373的博客 1674

高通拨号流程介绍

本文介绍了高通平台(如SDX55)中APSS(A7处理器)与ModEM(Q6处理器)间的通信机制。

四儿家的小祖宗的博客 1067

199、医疗内窥镜影像:微型镜头与高色彩保真度的ISP定制化方案

医疗内窥镜影像系统开发面临三大光学挑战:衍射极限导致分辨率下降,微型镜头色差严重,镀膜不足引发红外漏光。团队通过定制化ISP方案解决问题:采用分区色差补偿、红外泄露补偿技术,开发12区域分段颜色校正矩阵,并设计自适应伽马曲线。关键经验包括锁定白平衡避免术中偏色,优化FPGA流水线确保30fps流畅度,强调光学标定优先于算法优化。最终方案使DeltaE降至3以下,满足医生对组织颜色细微差异的识别需求,尤其解决了血管与脂肪边界辨识难题。

zzfmlxs的博客 262

OpenCv查找轮廓-cv2.findContours()函数

contours, hier = cv2.findContours(img,mode,method) 参数: 1. img: 要寻找轮廓的图像 2. mode:轮廓的检索模式(四种) 1.cv2.RETR_EXTERNAL 表示只检测外轮廓 2.cv2.RETR_LIST 检测的轮廓不建立等级关系 3.cv2.RETR_CCOMP 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层 4.cv2.RETR_TREE 建

weixin_44663883的博客 2341

ubuntu emto-cpa安装与编译

ubuntu emto-cpa安装与编译

qq_45834835的博客 1435

opencv-目标轮廓提取

import cv2 as cv import numpy as np if __name__=="__main__": img=cv.imread("D:/testimage/number.jpg") img = cv.imread("G:/Projects/persion reid/extract/test.jpg") #img1=cv.imread("D:/testimage/sample.jpg") #灰度化+高斯滤波 gray_dst = cv.cvtC

qq_42667229的博客 494

创建 Qt Quick 项目

来看看如何使用 Qt Creator 创建 Qt Quick 项目!

青春不老,奋斗不止! 1万+

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

「汽车电子助手」的博客 1万+

opencv函数用法说明(python)

简而言之就是cv2.findContours是一个寻找轮廓的函数,输入图像为二值图像,然后当参数设为轮廓检索模式的时候,意味着检索所有的轮廓,但是不建立层级关系,调用该函数之后,返回图像中检测物体的轮廓和层级信息,这里是轮廓检索模式,所以层级信息为-1。例如,若半径设为5,则圆的直径是10像素。内容:描述轮廓之间的层级关系(如父子轮廓),但在RETR_LIST模式下,所有层级关系均为-1(无关联)。​饱和度(S)和亮度(V)​:需排除低饱和度(灰色)或低亮度(暗色)区域,保留鲜艳的红色。

lz_逸尘9的博客 962

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

opencv 图片最大连通区域识别

这里用的opencv 的python api可能跟c的api 有少许区别 1. 图片初期处理     gray = cv.cvCreateImage (cv.cvSize (image.width, image.height), 8, 1)     edge = cv.cvCreateImage (cv.cvSize (image.width, image.height), 8, 1

lcydhr的专栏 3705

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

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

python半径为3圆形区域边界曲线_OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓...

本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl使用图片为Mjolnir_Round_Car_Magnet_300x300.jpg代码如下:import cv2import numpy as np# img = cv2.imread('lightning.jpg',0)img = cv2.imread('Mjolnir.jpg',cv2.IMREAD_U...

weixin_39525355的博客 285

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【亲测免费】 基于OpenCV的数字识别:高效、易用的开源解决方案

基于OpenCV的数字识别:高效、易用的开源解决方案 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今数字化时代,图像处理和识别技术在各个领域中扮演着越来越重要的角色。为了满足开发者对数字识别的需求,我们推出了一个基于OpenCV的数字识别开源项目。该项目通过OpenCV库实现了对图片中数字的高效识别,为开发者提供了一个简单易用的工具,帮助他们快速实现数字识别功能...

gitblog_09816的博客 745

opencv学习(四十)之寻找图像轮廓findContours()

1.概述在这篇文章中介绍如何使用findContours()函数寻找图像中物体的轮廓,在OpenCV中没有给出findCountours()函数的原理,如果想了解查找轮廓原理,可以翻**墙出去Google”Topological structural analysis of digitized binary images by border following”,这里就不一一翻译了.2.APIope

烟雨博客 8万+

python --opencv图像处理轮廓(寻找轮廓、绘制轮廓)详解

轮廓是一系列相连的点组成的曲线,代表了物体的基本外形,相对于边缘,轮廓是连续的,边缘并不全部连续。

weixin_44634704的博客 1万+

OpenCV:轮廓检测、查找轮廓、绘制轮廓、凸包、图像的矩特征

日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 3.8 轮廓检测 学习目标 了解图像的轮廓,知道怎么利用OPenCV查找轮廓 知道轮廓的特征 知道图像的矩特征 1 图像的轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓是图像目标的外部特征,这种...

あずにゃん梓喵的博客 1万+

利用OpenCV进行图像的轮廓检测

简 介: 本文对于OpenCV中的轮廓检测算法进行了讨论,可以看到一些基于轮廓检测的应用。接着对四种不同的提取方式的结果进行了讨论。你还了解了如何将轮廓进行绘制的方法。 关键词: 轮廓检测,二值化 #mermaid-svg-OXATIvUPho88S9L2 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-O..

TSINGHUAJOKING 2万+

如何利用OpenCV寻找轮廓的中心?

  §01 寻找轮廓的中心 今天在图像处理中需要用到OpenCV的轮廓中心,在 OpenCV center of contour 中看到了给定的方法。将其总结如下,便于以后的应用。 形状检测和分析 今天我们开启一个新的三联示例程序,用于形状检测和分析。通过这个系列,我们可以: 计算边界、形状的中心点; 识别不同的形状,比如圆形、方形,举行,三角形,五边形。这些仅仅根据边界的性质就可以进行识别; 标示形状的颜色。 相比于PyImageSearch网文来说,这个话题比较基础,但是为了回应下面我.

TSINGHUAJOKING 1万+

opencv 寻找轮廓线与轮廓线的交点, 轮廓与圆的交点

opencv 寻找轮廓线与圆的交点 在项目过程中 我遇到了一个问题就是要求一段不规则轮廓线与一个圆的交点,网上查了一些资料,如果轮廓线是规则的话还能算出轮廓线的方程可以方便的解出交点,但是现在轮廓线是不固定的不规则的所以无法解析出轮廓线的方程, 那么我只能用最笨的办法,弄两个存放圆和轮廓的掩膜然后做 and 运算,找出数值是1 的店就是我要的交点了。 程序如下: #计算轮廓和圆的交点,返回交点坐标。 def get_contour_circle_intersection(contour,circle

youandme520的专栏 6054
上一篇: 概率统计中的矩
下一篇: opencv计算点集凸包
__Destiny__
博客等级 码龄9年 27粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值