深度学习实例第二部分:OpenCV
OpenCV安装
执行以下命令安装opencv-python库(核心库)和opencv-contrib-python库(贡献库)。注意:命令拷贝后要合成一行执行,中间不要换行。
|
|
OpenCV基本操作
读取、图像、保存图像
|
|
执行结果:
图像色彩操作
彩色图像转换为灰度图像
|
|
执行结果:
色彩通道操作
|
|
执行结果:
灰度直方图均衡化
|
|
执行结果:
彩色亮度直方图均衡化
|
|
执行结果:
色彩提取
从图片中提取特定颜色
|
|
执行结果:
二值化与反二值化
|
|
执行结果:
图像形态操作
图像翻转
|
|
执行结果:
图像仿射变换
|
|
执行结果:
图像缩放
|
|
执行结果:
图像裁剪
|
|
执行结果:
图像相加
|
|
执行结果:
图像相减
|
|
执行结果:
透视变换
|
|
执行结果:
图像腐蚀
|
|
执行结果:
图像膨胀
|
|
执行结果:
图像开运算
|
|
执行结果:
图像闭运算
|
|
执行结果:
形态学梯度
|
|
执行结果:
图像梯度处理
模糊处理
|
|
执行结果:
图像锐化处理
|
|
执行结果:
边沿检测
|
|
执行结果:
轮廓处理
边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。
OpenCV提供了查找图像轮廓的函数cv2.findContours(),该函数能够查找图像内的轮廓信息,而函数cv2.drawContours()能够将轮廓绘制出来。图像轮廓是图像中非常重要的一个特征信息,通过对图像轮廓的操作,我们能够获取目标图像的大小、位置、方向等信息。一个轮廓对应着一系列的点,这些点以某种方式表示图像中的一条曲线。
查找并绘制轮廓
查找轮廓函数:cv2.findContours
语法格式:image,contours,hierarchy=cv2.findContours(image,mode,method)
返回值
- image:与函数参数中的原始图像image一致
- contours:返回的轮廓。该返回值返回的是一组轮廓信息,每个轮廓都是由若干个点所构成的(每个轮廓为一个list表示)。例如,contours[i]是第i个轮廓(下标从0开始),contours[i][j]是第i个轮廓内的第j个点
- hierarchy:图像的拓扑信息(反映轮廓层次)。图像内的轮廓可能位于不同的位置。比如,一个轮廓在另一个轮廓的内部。在这种情况下,我们将外部的轮廓称为父轮廓,内部的轮廓称为子轮廓。按照上述关系分类,一幅图像中所有轮廓之间就建立了父子关系。每个轮廓contours[i]对应4个元素来说明当前轮廓的层次关系。其形式为:[Next,Previous,First_Child,Parent],分别表示后一个轮廓的索引编号、前一个轮廓的索引编号、第1个子轮廓的索引编号、父轮廓的索引编号
参数
- image:原始图像。灰度图像会被自动处理为二值图像。在实际操作时,可以根据需要,预先使用阈值处理等函数将待查找轮廓的图像处理为二值图像。
- mode:轮廓检索模式,有以下取值和含义:
取值 含义 cv2.RETR_EXTERNAL 只检测外轮廓 cv2.RETR_LIST 对检测到的轮廓不建立等级关系 cv2.RETR_CCOMP 检索所有轮廓并将它们组织成两级层次结构,上面的一层为外边界,下面的一层为内孔的边界 cv2.RETR_TREE 建立一个等级树结构的轮廓 - method:轮廓的近似方法,主要有如下取值:
取值 含义 cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))=1 cv2.CHAIN_APPROX_SIMPLE 压缩水平方向、垂直方向、对角线方向的元素,只保留该方向的终点坐标 cv2.CHAIN_APPROX_TC89_L1 使用teh-Chinl chain近似算法的一种风格 cv2.CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain近似算法的一种风格 注意事项
- 待处理的源图像必须是灰度二值图
- 都是从黑色背景中查找白色对象。因此,对象必须是白色的,背景必须是黑色的
- 在OpenCV 4.x中,函数cv2.findContours()仅有两个返回值
绘制轮廓:drawContours函数
- 语法格式:image=cv2.drawContours(image, contours,contourIdx, color)
- 参数
- image:待绘制轮廓的图像
- contours:需要绘制的轮廓,该参数的类型与函数 cv2.findContours()的输出 contours 相同,都是list类型
- contourIdx:需要绘制的边缘索引,告诉函数cv2.drawContours()要绘制某一条轮廓还是全部轮廓。如果该参数是一个整数或者为零,则表示绘制对应索引号的轮廓;如果该值为负数(通常为“-1”),则表示绘制全部轮廓。
- color:绘制的颜色,用BGR格式表示
|
|
执行结果:
绘制矩形包围框
函数cv2.boundingRect()能够绘制轮廓的矩形边界。该函数的语法格式为:
|
|
代码:
|
|
执行结果:
绘制圆形包围圈
函数 cv2.minEnclosingCircle()通过迭代算法构造一个对象的面积最小包围圆形。该函数的语法格式为:
|
|
代码:
|
|
执行结果:
绘制最佳拟合椭圆
函数cv2.fitEllipse()可以用来构造最优拟合椭圆。该函数的语法格式是:
|
|
代码:
|
|
执行结果:
逼近多边形
函数cv2.approxPolyDP()用来构造指定精度的逼近多边形曲线。该函数的语法格式为:
|
|
代码:
|
|
执行结果:
视频基本处理
读取摄像头
|
|
播放视频文件
|
|
捕获并保存视频
|
|
综合案例
利用OpenCV实现图像校正
【任务描述】
我们对图像中的目标进行分析和检测时,目标往往具有一定的倾斜角度,自然条件下拍摄的图像,完全平正是很少的。因此,需要将倾斜的目标“扶正”的过程就就叫做图像矫正。该案例中使用的原始图像如下:
【代码】
|
|
【执行结果】
利用OpenCV检测芯片瑕疵
【任务描述】
利用图像技术,检测出芯片镀盘区域瑕疵。样本图像中,粉红色区域为镀盘区域,镀盘内部空洞为瑕疵区域,利用图像技术检测镀盘是否存在瑕疵,如果存在则将瑕疵区域标记出来。
【代码】
|
|
【执行结果】
http://www.taodudu.cc/news/show-4615265.html
相关文章:
- 极品,git简介,安装,方法
- 清除浮动最有效的css写法,清除浮动最有效的css写法
- Skywalking光会用可不行,必须的源码分析分析 - Skywalking Agent 插件解析
- ITE EC(IT81202)--- PMC模块手册翻译
- Python-Level5-day10am:视频基本处理,图像处理综合案例
- Unexpected error while obtaining UI hierarchy:使用uiautomatorviewer定位元素报错
- Oracle的对象权限、角色权限、系统权限
- Liquibase集成达梦数据库、Activiti集成达梦数据库
- Workflow规则收藏
- Drools7 动态更新规则
- GitLab CI/CD .gitlab-ci.yaml 关键词(十二):条件限定,only ,except,触发规则rules,工作流workflow
- java中workFlowEvent_关于WorkFlow的使用以及例子
- Windows Workflow学习笔记
- WorkFlow工程项目简介
- Workflow Engine for .Net Core ENTERPRISE v4.0.10-SEO-狼术
- WorkFlow建立
- workflow的简介
- 多人协作git workflow规范
- GitFlow Workflow
- 实用 Git Workflow
- 微软workflow foundation介绍
- Workflow:Workflow 百科
- WorkFlow工作流
- Hadoop与workflow入门
- html转图片 workflow,用 Workflow + Day one 给未来的自己做时间履历 | Matrix 精选
- git WorkFlow规范
- Windows Workflow Foundation 2 规则引擎简介
- 使用工作流Workflow规则更新机会Opportunity的可能性
- 分享超好用的微信和QQ缓存清理APP(无广告)
- 电脑版微信累积文件缓存清理小方法
深度学习实例第二部分:OpenCV相关推荐
- 李沐d2l《动手学深度学习》第二版——风格迁移源码详解
本文是对李沐Dive to DL<动手学深度学习>第二版13.12节风格迁移的源码详解,整体由Jupyter+VSCode完成,几乎所有重要代码均给出了注释,一看就懂.需要的同学可以在文末 ...
- 李沐《动手学深度学习》第二版比赛2-Classify Leaves
李沐<动手学深度学习>第二版比赛2-Classify Leaves 我的偶像,李沐大神主讲的<动手学深度学习>(使用Pytorch框架,第一版使用的是MXNet框架)目前已经进 ...
- Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类)
Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类) 1.卷积神经网络 1.1卷积神经网络简介 1.2卷积运算 1.3 深度学习与小数据问题的相关性 2.下载数据 2.1下载原始数据 ...
- TensorFlow 深度学习中文第二版·翻译完成
原文:Deep Learning with TensorFlow Second Edition 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>, ...
- TensorFlow 深度学习中文第二版(初稿)
TensorFlow 深度学习中文第二版 第 1 章深度学习入门 人工神经网络 ANN 如何学习? 神经网络架构 深度学习框架 总结 第 2 章 TensorFlow 的首次观察 TensorFlow ...
- 李沐《动手学深度学习》第二版 pytorch笔记1 环境搭建
李沐<动手学深度学习>第二版pytorch笔记1 搭建环境 文章目录 李沐<动手学深度学习>第二版pytorch笔记1 搭建环境 此时尚有耐心 虚拟环境搭建 创建虚拟环境 查看 ...
- 深度学习|实例分割:3D-BoNet
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 一.摘要 本文提出了一个简单高效的新型3D点云实例分割框架3D-BoNet,核心思想是逐点多层感知(M ...
- 基于深度学习的病理_组织病理学的深度学习(第二部分)
基于深度学习的病理 计算机视觉/深度学习/医学影像 (COMPUTER VISION/ DEEP LEARNING/ MEDICAL IMAGING) In the last part, we sta ...
- 【学习周报】深度学习笔记第二周
学习目标: 吴恩达深度学习课程week2 学习内容: 梯度下降法(Gradient Descent) 计算图(Computation Graph) 逻辑回归中的梯度下降(Logistic Regres ...
最新文章
- Docker compose 容器编排
- android 手机图库获取sd卡图片,关于Android读取不同位置(drawable,asset,SDCard)的图片资源的总结...
- 验证输入的是否数字的几种方法
- java lock 对象_Java并发编程锁系列之ReentrantLock对象总结
- Python(七) 元组+集合+随机+string
- rtsp交互命令简介及过程参数描述
- 输入框输入数字,且不能有小数点存在
- js var是什么类型_JS变量的执行环境和生命周期
- 前端学习(2458):素材管理
- 沃尔沃汽车警告称:半导体短缺将持续到明年
- Tomcat发布自己的一个web网站
- python中字符串怎么引用_如何在字符串中引用函数参数
- 设计之星 ai_二十万人的AI成长之路 ,百度之星用十五年去点亮
- 数独游戏,随机生成只有唯一解的数独表
- Word查找重复的内容
- IntelliJ IDEA 破解
- php里macd预测算法,股票MACD指标算法公式
- linux系统图形界面
- AI绘画怎么生成?这些软件帮助你实现
- Flask 数据生成/数据迁移/数据事件