Opencv_11 阈值分割
文章目录
- 一. 全局阈值分割
- 二. Otsu阈值分割(大律法)
- ① 大律法阈值分割的原理
- 三. 自适应阈值(局部阈值)
- ① 自适应阈值分割的原理
- ② 自适应阈值分割的函数原型
- ③ 自适应阈值分割代码示例
一. 全局阈值分割
全局阈值分割指的是使用一个固定的阈值,大于这个阈值的设定为一个颜色,小于或者等于这个阈值的像素设定为另外一种颜色.
函数原型:
double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type );
src:
要处理的图像,一般是灰度图像dst:
输出图像thres:
设定的阈值maxval:
灰度的最大值,一般为255,用来指明阈值分割中最大值的取值,主要指阈值二值化和反二值化中type:
阈值分割的方式
``
阈值分割案例
#include "MyOpencv.h"int main(void)
{Mat original = cv::imread("test_02.bmp", IMREAD_GRAYSCALE);imshow("Original", original);Mat dst;// 阈值二值化cv::threshold(original, dst, 127, 255, cv::THRESH_BINARY);imshow("ThresBinary", dst);// 阈值反二值化cv::threshold(original, dst, 127, 255, cv::THRESH_BINARY_INV);imshow("ThresBinaryInv", dst);// 阈值截断cv::threshold(original, dst, 127, 255, cv::THRESH_TRUNC);imshow("ThresTrunc", dst);// 阈值取零cv::threshold(original, dst, 127, 255, cv::THRESH_TOZERO);imshow("ThresToZero", dst);// 阈值反取零cv::threshold(original, dst, 127, 255, cv::THRESH_TOZERO_INV);imshow("ThresToZeroInv", dst);waitKey(0);
}
二. Otsu阈值分割(大律法)
① 大律法阈值分割的原理
对于图像I(x,y),前景(即目标)和背景的分割阈值记为T,属于前景的像素点数占整幅图像的比例记为w0,其平均灰度u0;背景像素点数占整幅图像的比例记为w1,其平均灰度记为u1.图像的总平均灰度记为u,类间方差记为g.假设图像的大小为M*N,图像中像素的灰度值小于阈值T的像素个数记为N0,像素灰度大于阈值T的像素个数记为N1,则有:
使用方式:
阈值分割的时候加上type里面加上标志: THRES_OTSU即可,最终进行阈值分割的阈值会返回
double T = cv::threshold(original, dst, 0, 255, cv::THRESH_OTSU);cout << "大律法进行阈值分割的阈值: " << T << endl;imshow("OtsuThresBinary", dst);
结果:
三. 自适应阈值(局部阈值)
① 自适应阈值分割的原理
在自适应阈值处理中,平滑算子的尺寸决定了分割出来的物体的尺寸,如果滤波器尺寸太小,那么估计出的局部阈值将不理想.凭经验,平滑算子的宽度必须大于被识别物理题的宽度,窗口的尺寸越大,平滑后结果越能更好地作为每个像素的阈值参考,也不能无限大.
假设输入的图像为I,宽度为W,高度为H,自适应阈值分割的步骤如下:
- 对图像进行平滑处理,平滑结果为f(I),其中平滑可以是均值平滑,高斯平滑
- 自适应阈值矩阵 Thresh = (1-ratio) * f(I), 一般令 ratio = 0.15
- 利用局部阈值分割规则
② 自适应阈值分割的函数原型
void cv::adaptiveThreshold ( InputArray src,OutputArray dst,double maxValue,int adaptiveMethod,int thresholdType,int blockSize,double C )
算法思想: 局部二值化
step1:
对某个像素值,原来的S,取其周围N*N的区域,求区域均值或者高斯加权值,记为T.step2:
对图像,如果S>T,则该像素二值化为255,否则为0
可以出入参数C,C可以是任何数,当S>T-C,则把原像素二值化为255.
参数C的作用,其实就是改变计算后的阈值,比如计算后的阈值是12,如果加上一个C,其阈值就变成了12+C
③ 自适应阈值分割代码示例
#include "MyOpencv.h"int main(void)
{Mat original = cv::imread("test_03.bmp", cv::IMREAD_GRAYSCALE);imshow("Original", original);// 使用大律法进行阈值分割Mat dst;cv::threshold(original, dst, 0, 255, cv::THRESH_OTSU);imshow("Otsu", dst);// 使用固定阈值分割cv::threshold(original, dst, 127, 255, cv::THRESH_BINARY);imshow("ThresBinary", dst);// 使用自适应阈平均阈值值分割,并且C为0adaptiveThreshold(original, dst, 255, cv::ADAPTIVE_THRESH_MEAN_C,cv::THRESH_BINARY, 19, 0);imshow("Mean_C(0)", dst);// 使用自适应阈值高斯均值,并且C为10adaptiveThreshold(original, dst, 255, cv::ADAPTIVE_THRESH_GAUSSIAN_C, cv::THRESH_BINARY, 5, 2);imshow("Gaussian_Mean_C(10)", dst);waitKey(0);return 0;
}
Opencv_11 阈值分割相关推荐
- 数字图像处理:blob分析、阈值分割
1.Blob分析: 1.1.blob分析概念在计算机视觉中的Blob(Binary large object)是指图像中的具有相似颜色.纹理等特征所组成的一块连通区域,一般来说,该区域就是图像中的前景 ...
- opencv阈值分割类型
threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type); src:输入图,只能输入单通道图 ...
- otsu阈值分割算法_图像分割之大津算法(OTSU)
关注公众号,获取更多信息 引言 最近一直在看图像二值化相关的东西,一直想寻找一个好的方法,能够自适应的设定阈值.这个过程中,发现了OTSU算法,其实这也算是基本的图像处理算法,之前有过接触,但是放过了 ...
- opencv 阈值分割 — threshold()
OpenCV阈值分割函数:threshold() 函数原型: double threshold(InputArray src, OutputArray dst, double thresh, doub ...
- 利用最大熵进行阈值分割从而实现灰度图像的二值化的原理概要及OpenCV代码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 详细的数学原理目前我也没搞明白,所以只说下原理概 ...
- otsu自适应阈值分割的算法描述和opencv实现,及其在肤色检测中的应用
from:http://blog.csdn.net/onezeros/article/details/6136770 otsu算法选择使类间方差最大的灰度值为阈值,具有很好的效果 算法具体描述见ots ...
- opencv 图像阈值分割图像
最简单的图像分割的方法. 应用举例:从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体).这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分 ...
- c++ opencv编程实现暗通道图像去雾算法_OpenCV图像处理专栏十五 |一种基于亮度均衡的图像阈值分割技术...
前言 对于光照不均匀的图像,用通常的图像分割方法不能取得满意的效果.为了解决这个问题,论文<一种基于亮度均衡的图像阈值分割技术>提出了一种实用而简便的图像分割方法.该方法针对图像中不同亮度 ...
- opencv 图像分割 阈值分割 图像二值化 灰度图
# -*- coding: utf-8 -*- """ @File : 191213_测试_阈值分割.py @Time : 2019/12/13 15:14 @Autho ...
最新文章
- 图像边缘检测--OpenCV之cvCanny函数
- 自定义 Layer 属性的动画
- linux内核技术文章
- MongoDB 之 手把手教你增删改查 MongoDB - 2
- GDCM:gdcm::Validate的测试程序
- C++ Opengl纹理贴图源码
- Android UI 色板
- vue 如何点击按钮返回上一页
- 利用域名(host碰撞)碰撞实现从任何地方发起中间人攻击(理论篇)
- python 路径格式化_Python Black 一键格式化美化代码
- MATLAB1阶零模型,MATLAB 空间计量模型的实现
- Python 双y轴绘制
- python语音转文字源码_python文字转语音实现过程解析
- Idea如何设置页面内容模板
- MatLab2019下载
- 订阅号与服务号的区别
- 036.crud准备
- L1-039 古风排版 (20 分)(二维数组)
- MISC:压缩包取证(zip爆破、明文攻击、伪加密、CRC32碰撞)
- SVN提交报错: txn-current-lock拒绝访问。
热门文章
- nginx代理应用sso跳转处理
- lyapunov指数求取时运用qr法与jacobi法之间的区别与联系【基于matlab的动力学模型学习笔记_10】
- LaTeX中使用bicaption、tabula包绘制三线表
- 《Adobe Acrobat DC经典教程》—第1章1.7节使用工具栏
- Windows 10 安装 CUDA 失败之屡败屡战
- Open3D 区域生长分割:详解Python实现过程
- Shader的诞生 十大贴图常用贴图介绍
- bat自动备份Oracle数据库
- 计算机网络接口 rj45类型,RJ45计算机网络接口信号防雷器
- python汇率编程_python – 确定汇率的算法