当前位置: 首页 > news >正文

十五 open CV 教程 形态学二值化和腐蚀操作

        一、形态学概述


        指一系列处理图像形状特征的图像处理技术。形态学的基本思想是利用一种特殊的结构元(本质上就是卷积核)来测量或提取输入图像中相应的形状或特征,以便进一步进行图像分析和目标识别。
       ”方法基本是对二进制图像进行处理,即黑白图像
        卷积核决定着图像处理后的效果
        形态学常用基本操作有:
        1、膨胀和腐蚀
        2、 开运算
        3、闭运算
        4、顶帽
        5、 黑帽

         二、 图像全局二值化

threshold英 [ˈθreʃhəʊld]   门槛;门口;出入口;起点;开端;开始;阈限
        二值化:将图像的每个像素变成两种值,比如0,255.
  threshold(src, dst,thresh, maxval, type[, dst])

        thresh大黑的多,小白的多

threshold 函数
retval, dst = cv2.threshold( src, thresh, maxval, type )
其中
thresh 表示要设定的阈值
maxval 表示当type 参数为 THRESH_BINARY 或者 THRESH_BINARY_INV 时,需要设定的最大值
type 表示阈值分割的类型(常见的有如下5种)
  cv2.THRESH_BINARY                高于阈值为255,低于阈值值为0
  cv2.THRESH_BINARY_INV        高于阈值为0,低于阈值值为255
  cv2.THRESH_TRUNC                截断,高于thresh,其值变为阈值
  cv2.THRESH_TOZERO              变0,低于阈值的,其值变为0
  cv2.THRESH_TOZERO_INV      超阈值变为0  

        三、自适应阈值二值化


        全局阈值,整幅图像采用同一个数作为阈值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应阈值。此时的阈值是根据图像上的每一个小区域计算与其对应的阈值。因此在同一幅图像上的不同区域采用的是不同的阈值,从而使我们能在亮度不同的情况下得到更好的结果。
        adaptiveThreshold(src,dst, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
这种方法需要我们指定六个参数,
        Adaptive Method-指定计算阈值的方法。
        ADPTIVE THRESH_MEAN_C:阈值取自相邻区域的平均值
        ADPTIVE_THRESH_GAUSSIAN_C:阈值取值相邻区域的加权和,权重为一个高斯窗口。
        Block Size-邻域大小(用来计算阈值的区域大小)。
        C-这就是是一个常数,阈值就等于的平均值或者加权平均值减去这个常数。

       四、OTSU大津阈值处理
OTSU方法可以根据当前图像找到最佳的类间分割阈值。OTSU方法会遍历所有可能的阈值,从而找到最佳的阈值,该方法本质是使得类间方差最大。

注意:在使用 Otsu 方法时,要把阈值设为 0。 此时的函数 cv2.threshold()会自动寻找最优阈值,并将返回该阈值。
t,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
与普通阈值分割的不同之处在于:

参数 type 增加了一个参数值“cv2.THRESH_OTSU”设定的阈值为 0返回值 t 是 Otsu 方法计算得到并使用的最优阈值

        五、腐蚀操作

        腐蚀操作也是用卷积核扫描图像,只不过腐蚀操作的卷积和一般都是1,如果卷积核内所有像素点都是白色,那么锚点即为白色.        

函数支持就地模式,腐蚀操作可以迭加使用多次,在多通道图像的情况下,每个通道独立处理。

函数原型
CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,
                         Point anchor = Point(-1,-1), int iterations = 1,
                         int borderType = BORDER_CONSTANT,
                         const Scalar& borderValue = morphologyDefaultBorderValue() );

参数描述
参数 src 输入图像;通道的数量可以是任意的,但是深度值应该是以下之一:
CV_8U, CV_16U, CV_16S, CV_32F or CV_64F.

参数 dst 和源图像同样大小和类型的输出图像。

参数 kernel 用于腐蚀的结构元素;如果element=Mat(),是一个3 x 3的矩形结构元素. Kernel 可以通过使用getStructuringElement来创建。

参数 anchor 素中的锚点的位置,默认是值(-1,-1),也就是说锚点在元素的中心位置。

参数 iterations 腐蚀的迭代次数。

参数 borderType像素外推方法。参见#BorderTypes, BORDER_WRAP不支持。

参数 borderValue 固定边缘的情况下的边缘值。

参考 dilate, morphologyEx, getStructuringElement

        五、 获取形态学卷积核


        opencv提供了获取卷积核的api.不需要我们手工创建卷积核.
        getStructuringElement(shape, ksize[, anchor])
        shape是指卷积核的形状,注意不是指长宽,是指卷积核中1形成的形状.
        MORPH RECT卷积核中的1是矩形,常用.
        MOBPH_ELLIPSE 椭圆
        MORPH GROSS十字

void myCV::thresholdtest()
{//转为灰度图像Mat dst, src = imread("05.jpg", IMREAD_GRAYSCALE);//全局二值化//threshold(src, dst, 127, 255, THRESH_BINARY);//自适应阈值二值化//adaptiveThreshold(src, dst, 125, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 3, 0);//腐蚀操作,将有黑点的区域全变黑。/*Mat kernel = Mat::ones(Size(4, 4), CV_8UC1);erode(src, dst, kernel,Point(-1,-1),3);*///获取形态学卷积核,腐蚀操作。Mat kernel = getStructuringElement(MORPH_RECT, Size(8, 8));erode(src, dst, kernel,Point(-1,-1),1);imshow("dst", dst);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 结构型设计模式:桥接/组合/装饰/外观/享元
  • 【Nuxt】配置
  • 【Python 逆向滑块】(实战六)逆向滑块,并实现用Python+Node.js 生成滑块、识别滑块、验证滑块、发送短信
  • CTF web bibibi题型
  • Unity计算位置平移矩阵
  • 《Milvus Cloud向量数据库指南》——什么是高可用:深入理解数据库系统中的高可用性架构
  • 【Redis 进阶】哨兵 Sentinel(重点理解流程和原理)
  • XML 学习笔记
  • ZeroMQ(二):请求-响应模式,C和C++。
  • 中国AI大模型场景探索及产业应用调研报告
  • 类和对象(上) - c++
  • 【React】常见的 HOC 使用案例
  • Qt Designer,仿作一个ui界面的练习(一):界面的基本布局
  • Unity四元数线性插值Lerp
  • C++篇:入门(2)
  • python3.6+scrapy+mysql 爬虫实战
  • angular2开源库收集
  •  D - 粉碎叛乱F - 其他起义
  • egg(89)--egg之redis的发布和订阅
  • ES学习笔记(12)--Symbol
  • iOS 系统授权开发
  • javascript面向对象之创建对象
  • JS基础之数据类型、对象、原型、原型链、继承
  • leetcode讲解--894. All Possible Full Binary Trees
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 包装类对象
  • 工程优化暨babel升级小记
  • 简单易用的leetcode开发测试工具(npm)
  • 浅谈web中前端模板引擎的使用
  • 如何解决微信端直接跳WAP端
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (0)Nginx 功能特性
  • (1)(1.11) SiK Radio v2(一)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (4)logging(日志模块)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (补)B+树一些思想
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (新)网络工程师考点串讲与真题详解
  • (转)我也是一只IT小小鸟
  • (转载)hibernate缓存
  • (转载)Linux网络编程入门
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .md即markdown文件的基本常用编写语法
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件