轮廓检测

  • 图像金字塔

    上采样,图像变大一倍,矩阵用0填充

img = cv2.imread('1,jpg')
cv_show('img',img)
up = cv2.pyrUp(img)
cv_show('up',up)

下采样,图像缩小一倍 删除矩阵偶数行偶数列

img = cv2.imread('1.jpg')
cv_show('img',img)
down = cv2.pyrDown(img)
cv_show('down',down)

  • 拉普拉斯金字塔

对图像G先down得到G_d,再G_d进行up得到G_d_u,然后对G_d_u先down再up,反复这个过程直到某一点结束

down = cv2.pyrDown(img)
down_up = cv2.pyrUp(down)
l_l = img - down_up
cv_show('l_l',l_l)


  • 轮廓检测

  进行轮廓检测 先使图像变成灰度图,再进行二值化处理,再利用cv2.findContours()进行轮廓检测,再利用    cv2.drawContours()画出轮廓

1.cv2.findContours(二值化图像,轮廓检索方式,轮廓近似方式)

    轮廓检索方式:一般使用cv2.RETR_TREE

cv2.RETR_EXTERNAL 只检测外轮廓
cv2.RETR_LIST 检测的轮廓不建立等级关系
cv2.RETR_CCOMP 建立两个等级的轮廓,上面一层为外边界,里面一层为内孔的边界信息
cv2.RETR_TREE 建立一个等级树结构的轮廓

  轮廓近似方式:

cv2.CHAIN_APPROX_NONE 存储所有边界点
cv2.CHAIN_APPROX_SIMPLE 压缩垂直、水平、对角方向,只保留端点
cv2.CHAIN_APPROX_TX89_L1 使用teh-Chini近似算法
cv2.CHAIN_APPROX_TC89_KCOS 使用teh-Chini近似算法

  cv2.findContours在Opencv3里有三个返回值:输入的二值化图像,图像的轮廓,轮廓的层析结构(本身包含两个                          ndarray,每个ndarray对应一个轮廓,每个轮廓有四个属性)

  cv2.findContours在Opencv2、Opencv4里有两个返回值:图像的轮廓,轮廓的层析结构

2.cv2.drawContours(原始图像,轮廓,轮廓的索引(当设置为-1时,绘制所有轮廓),画笔颜色,画笔大小)

cv2.drawContours返回值是绘制轮廓后的图像,注意原图像会变化,如果不想让原图变化的话可以copy一份

img = cv2.imread('TX.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
thresh,contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
draw_img = img.copy()
res = cv2.drawContours(draw_img,contours,-1,(0,0,255),2)
cv_show('res',res)

  轮廓特征

#轮廓特征
cnt = contours[0]
#面积
a = cv2.contourArea(cnt)
print(a)
#周长 True表闭合
L = cv2.arcLength(cnt,True)
print(L)

  轮廓近似

  cv2.approxPolyDP() 主要功能是把一个连续光滑曲线折线化,对图像轮廓点进行多边形拟合

  参数有3个:

  InputArray curve:输入曲线,数据类型可以为vector<Point>。

  double epsilon:判断点到相对应的line segment 的距离的阈值。(距离大于此阈值则舍弃,小于此阈值则保留,           epsilon越小,折线的形状越“接近”曲线。)

  bool closed:曲线是否闭合的标志位。

#利用周长做阈值进行轮廓近似
epsilon = 0.02 * cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True)


  • 外接矩形

  利用cv2.boundingRec(cnt)返回cnt的外接矩形的左上点坐标和宽w和高h,再利用cv2.rectangle()画出外接矩形

  cv2.rectangle()有五个参数:图像,(x,y)左上角坐标,(x+w,y+h)右下角坐标,画笔颜色,画笔粗细

x,y,w,h = cv2.boundingRect(cnt)
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
cv_show('img',img)

OpenCv基础_三的更多相关文章

  1. OpenCv基础_一

    图片的读取和展示 import cv2 img = cv2.imread('1.jpg') cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWin ...

  2. OpenCv基础_四

    Harris角点检测 理解 内部点:蓝框所示,无论滑动窗口水平滑动还是竖直滑动,框内像素值都不会发生大的变化 边界点:黑框所示,滑动窗口沿着某一个方向滑动框内像素点不会发生大的改变,但是沿着另一个方向 ...

  3. OpenCV基础_二

    阈值和平滑处理 cv2.threshold()二值化函数 ret,thresh = cv2.threshold(src, thresh, maxval, type[, dst]) 参数 src:所要进 ...

  4. RequireJS基础(三)

    这篇来写一个具有依赖的事件模块event. event提供三个方法bind.unbind.trigger来管理DOM元素事件. event依赖于cache模块,cache模块类似于jQuery的$.d ...

  5. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  6. java 基础知识三 java变量

    java  基础知识 三 变量 1.作用域 {} 包围起来的代码 称之为代码块,在块中声明的变量只能在块中使用 2.常量 就是固定不变的量,一旦被定义,它的值就不能再被改变. 3.变量 变量必须在程序 ...

  7. 什么是图像 -- opencv基础

    opencv基础篇--到底什么是图像 什么是图像?英语中有两个单词来形容图像,一个是picture,一个是image.这两者虽然是形容同一个东西,但却又有着区别.picture代表实而有物的真实图像: ...

  8. python基础_格式化输出(%用法和format用法)(转载)

    python基础_格式化输出(%用法和format用法) 目录 %用法 format用法 %用法 1.整数的输出 %o -- oct 八进制%d -- dec 十进制%x -- hex 十六进制 &g ...

  9. [Linux]经典面试题 - 网络基础 - TCP三次握手

    [Linux]经典面试题 - 网络基础 - TCP三次握手 目录 [Linux]经典面试题 - 网络基础 - TCP三次握手 一.TCP报文格式 1.1 TCP报头 1.2 报文图例 二.TCP三次握 ...

随机推荐

  1. shell——trap捕捉信号(附信号表)

    trap捕捉信号有三种形式 第一种:trap "commands" signal-list 当脚本收到signal-list清单内列出的信号时,trap命令执行双引号中的命令. 例 ...

  2. SYSTEM表空间满,解决方法

    SYSTEM表空间是Oracle创建数据库时候自动创建的,每个Oracle数据库都会有SYSTEM表空间,而且SYSTEM表空间总是要保持在联机模式下,因为其包含了数据库运行所要求的基本信息,如:数据 ...

  3. Solution -「CEOI 2006」「洛谷 P5974」ANTENNA

    \(\mathcal{Description}\)   Link.   给定平面上 \(n\) 个点,求最小的能覆盖其中至少 \(m\) 个点的圆半径及一个可能的圆心.   \(n\le500\),坐 ...

  4. HMS Core积极探索基于硬件耳返的功能,帮助唱吧整体唱歌延迟率降低60%

    唱吧的使命是让唱歌更简单.让生活更美好,其布局的K歌业务专注于让曲库更全.音质更好,开创了同框合唱.弹唱等有意思的游戏类K歌玩法.为了让用户拥有更加沉浸的娱乐体验,唱吧与HMS Core积极探索基于硬 ...

  5. RISC-V 特权指令结构

    机器模式 机器模式(缩写为 M 模式,M-mode)是 RISC-V 中 hart(hardware thread,硬件线 程)可以执行的最高权限模式.在 M 模式下运行的 hart 对内存,I/O ...

  6. 阿里云服务器ECS挂载数据盘—linux系统

    参考阿里云官网帮助文档:https://help.aliyun.com/document_detail/25426.html 里面有些步骤说的不是很清楚,初学者可能操作时会遇到问题.通过这篇文档进行进 ...

  7. [自动化]基于kolla-ceph的自动化部署ceph集群

    kolla-ceph来源: 项目中的部分代码来自于kolla和kolla-ansible kolla-ceph的介绍: 1.镜像的构建很方便, 基于容器的方式部署,创建.删除方便 2.kolla-ce ...

  8. 可视化BI工具选型,应该注意什么

    ​伴随着大数据时代的到来,企业对数据的需求从"IT主导的报表模式"转向"业务主导的自助分析模式",可视化BI工具也随之应运而生.面对如此众多的可视化BI工具,我 ...

  9. 在 CentOS 或 RHEL 系统上检查可用的安全更新的方法

    当你更新系统时,根据你所在公司的安全策略,有时候可能只需要打上与安全相关的补丁.大多数情况下,这应该是出于程序兼容性方面的考量.那该怎样实践呢?有没有办法让 yum 只安装安全补丁呢? 答案是肯定的, ...

  10. 利用Node.js编写跨平台的spawn语句

    node const child = cp.spawn('npm', ['run', 'build']); 报错 events.js:182 throw er; // Unhandled 'error ...