python+openCV 自适应阈值分割
当图像各局部亮度不同时,全局阈值就很难将背景和目标分割。因此提出了自适应阈值,即在图像的不同区域采用不同的阈值进行分割。利用函数cv2.adaptiveThreshold()进行分割。
cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
参数:
1. src:原图像
2. maxValue:当阈值类型(thresholdType)采用cv2.THRESH_BINARY和cv2.THRESH_BINARY_INV时像素点被赋予的新值
3. adaptiveMethod:自适应阈值的计算方法,包括两种:
- cv2.ADPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值
- cv2.ADPTIVE_THRESH_GAUSSIAN_C:阈值取值相邻区域的加权和,权重为一个高斯窗口。
4. thresholdType:阈值分割类型,共5种,同cv2.threshold()的阈值分割类型参数,详情见https://blog.csdn.net/weixin_42216109/article/details/89553383
5. blockSize:用来计算阈值的邻域大小
6. C:常数,adaptiveMethod方法计算出的数值减去这个常数C就为阈值
返回值:
1. 阈值分割后的图像
e.g.
通过如下代码对比全局阈值分割和自适应阈值分割的区别
import cv2
import matplotlib.pyplot as plt
#载入原图
img_original=cv2.imread('E:\ShannonT\\notebook workspace\\images\\4.26.6.jpg',0)
#全局阈值分割
retval,img_global=cv2.threshold(img_original,130,255,cv2.THRESH_BINARY)
#自适应阈值分割
img_ada_mean=cv2.adaptiveThreshold(img_original,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,15,3)
img_ada_gaussian=cv2.adaptiveThreshold(img_original,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,15,3)
imgs=[img_original,img_global,img_ada_mean,img_ada_gaussian]
titles=['Original Image','Global Thresholding(130)','Adaptive Mean','Adaptive Guassian',]
#显示图片
for i in range(4):plt.subplot(2,2,i+1)plt.imshow(imgs[i],'gray')plt.title(titles[i])plt.xticks([])plt.yticks([])
plt.show()
结果显示如下:
补充:从自适应阈值分割的结果来看,图像中存在较多的噪声,于是我们可以先通过函数cv2.GaussianBlur()进行噪声去除,详情参考https://blog.csdn.net/duwangthefirst/article/details/79971338
import cv2
import matplotlib.pyplot as plt
#载入原图
img_original=cv2.imread('E:\ShannonT\\notebook workspace\\images\\4.26.6.jpg',0)
#高斯滤波
img_blur=cv2.GaussianBlur(img_original,(5,5),5)
#自适应阈值分割
img_thresh=cv2.adaptiveThreshold(img_original,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,15,3)
img_thresh_blur=cv2.adaptiveThreshold(img_blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,15,3)
#显示图像
imgs=[img_thresh,img_thresh_blur]
titles=['img_thresh','img_thresh_blur']
for i in range(2):plt.subplot(1,2,i+1)plt.imshow(imgs[i],'gray')plt.title(titles[i])plt.xticks([])plt.yticks([])
plt.show()
结果如下所示,可以发现噪声数量明显减少。
python+openCV 自适应阈值分割相关推荐
- Python+OpenCV:阈值分割
Python+OpenCV:阈值分割 阈值分割 ############################################################################ ...
- OpenCV自适应阈值分割函数:adaptiveThreshold()介绍
OpenCV自适应阈值分割函数:adaptiveThreshold()介绍 [注意] 1. adaptiveThreshold()函数的ThresholdTypes参数只能设置为"CV_TH ...
- python+opencv实现阈值分割
系列文章目录 文章目录 系列文章目录 前言 一.全局阈值 1.效果图 2.源码 二.滑动改变阈值(滑动条) 1.效果图 2.源码 三.自适应阈值分割 1.效果图 2.源码 3.GaussianBlur ...
- 【千律】OpenCV基础:图像阈值分割 -- 自适应阈值分割 -- 代码实现
环境:Python3.8 和 OpenCV 内容:自适应阈值分割代码实现 import cv2 as cv import numpy as np import matplotlib.pyplot as ...
- 在OpenCV里实现自适应阈值分割
在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所有的信息提供保留.实验室环境下,相应的素材是模板化的,但是将实验室方法应用于现实环境中时,我们会发现光影环境对于效果的影 ...
- otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用
from:http://blog.csdn.net/onezeros/article/details/6136770 otsu算法选择使类间方差最大的灰度值为阈值,具有很好的效果 算法具体描述见ots ...
- 图像二值化方法及适用场景分析(OTSU Trangle 自适应阈值分割)
图像二值化 应用场景 二值图像定义 阈值获取的方法 手动阈值法 自动阈值法 灰度均值法 基于直方图均值法 OTSU Triangle 自适应均值阈值分割方法 总结 参考文献 应用场景 二值图像处理与分 ...
- python canny优化_基于python的自适应阈值的Canny边缘检测
canny边缘检测的接口在opencv中给出,直接调用: ret = cv2.canny(img,t1,t2) 您可以获取边缘检测结果. 其中,t1,t2是需要手动设置的阈值. 许多文献研究了自动阈值 ...
- OpenCV自适应阈值化函数adaptiveThreshold详解,并附实例源码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 2016-6-14日:又发现一种阈值分割法,最大 ...
最新文章
- android7.0图标反馈,android7.0 webview中 图标错位
- python自动化办公pdf-基于python实现自动化办公学习笔记
- jsoncpp在vs2013上的编译
- LightOJ 1370 - Bi-shoe and Phi-shoe
- 【原创】MVC+ZTree实现权限树的功能
- CSDN挑战编程——《绝对值最小》
- Java Swing 如何关闭当前窗口?
- pandas合并groupby_Pandas中级技巧-数据的灵活运算
- python之IO多路复用
- Java数据类型及类型转换
- Android UI学习之Gallery
- 时间序列分析与非参数统计
- 语音压缩编解码器:lyra
- HTML实现圆形头像效果
- php word替换换行符,word换行替换
- Matlab信道容量的迭代计算实验
- 爬虫实战:链家租房数据爬取,实习僧网站数据爬取
- unity 创建自己的像素地图 TileMap
- 备战Noip2018模拟赛3(B组) T2 Dance 开场舞蹈
- 从Web of Science 爬取文章作者邮箱小记