阈值化(Threshold)

阈值化,即图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。
其实在完成许多处理步骤后,通常希望对图像中的像素做出最后的决策,或直接剔除一些低于或高于一定值的像素。在opencv里面Threshold()可以完成这些任务。基本思想是,给定一个数组和一个阈值,然后根据数组中的每个元素的值是低于还是高于阈值而进行一些处理。

Opencv里面的API介绍:(全局阈值化)

void threshold(Mat dst,Mat dst1,int threshold_value,int threshold_max,type);






Opencv里面的API介绍:(局部阈值化)

局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值。这样做的好处在于每个像素位置处的二值化阈值不是固定不变的,而是由其周围邻域像素的分布来决定的。亮度较高的图像区域的二值化阈值通常会较高,而亮度较低的图像区域的二值化阈值则会相适应地变小。不同亮度、对比度、纹理的局部图像区域将会拥有相对应的局部二值化阈值。常用的局部自适应阈值有:1)局部邻域块的均值;2)局部邻域块的高斯加权和。

void adaptiveThreshold(InputArray src,    输入图像. OutputArray dst,     输出图像.double max_value,int adaptive_method,int threshold_type,int block_size,double param )

参数解释:

第一个参数,输入图像,需为8位单通道浮点图像;
第二个参数,输出图像,需和原图像尺寸类型一致;
第三个参数,double类型,给像素赋的满足条件的非零值;
第四个参数,用于指定自适应阈值的算法,CV_ADAPTIVE_THRESH_MEAN_C ,CV_ADAPTIVE_THRESH_GAUSSIAN_C
第五个参数,取阈值类型:必须是CV_THRESH_BINARY或者CV_THRESH_BINARY_INV
第六个参数,用来计算阈值的象素邻域大小: 3, 5, 7, …
第七个参数,与方法有关的参数。对方法 CV_ADAPTIVE_THRESH_MEAN_C 和 CV_ADAPTIVE_THRESH_GAUSSIAN_C, 它是一个从均值或加权均值提取的常数, 有时也可以是小数或负数。

对方法 CV_ADAPTIVE_THRESH_MEAN_C,先求出块中的均值,再减掉param。
对方法 CV_ADAPTIVE_THRESH_GAUSSIAN_C ,那么区域中(x,y)周围的像素根据高斯函数按照他们离中心点的距离进行加权计算, 再减掉param。
示例程序:

#include "stdafx.h"
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>using namespace cv;
Mat src, dst, dst1;
int threshold_value = 127;
int threshold_max = 255;
int type = 2;
int type_max = 4;
char result[] = "threshold image";//或者定义一个指针形式:const char* result="threshold image";
void threshold_Demo(int, void*);
int main(int argc, int argv)
{src = imread("C:\\Users\\59235\\Desktop\\imag\\girl1.jpg");if (!src.data){printf("could not load image...\n");return -1;}namedWindow("input", CV_WINDOW_AUTOSIZE);imshow("input", src);namedWindow(result, CV_WINDOW_AUTOSIZE);createTrackbar("threshold value", result, &threshold_value, threshold_max, threshold_Demo);createTrackbar("threshold type", result, &type, type_max, threshold_Demo);threshold_Demo(0, 0);waitKey(0);return 0;
}
//阈值化实现函数
void threshold_Demo(int, void*)
{cvtColor(src, dst, CV_BGR2GRAY);imshow("GRAY", dst);//阈值化(自主定义阈值)//threshold(dst,dst1,threshold_value,threshold_max,type);//src:源图像,可以为8位的灰度图,也可以为32位的彩色图像。(两者由区别)dst:输出图像 thresh:阈值maxval:dst图像中最大值 type:阈值类型有8种(1 THRESH_BINARY 2  THRESH_BINARY_INV 3 THRESH_TRUNC 4  THRESH_TOZERO 5 THRESH_TOZERO_INV 6 THRESH_MASK  7  THRESH_OTSU  8  THRESH_TRIANGLE)//阈值化(系统帮忙取,大津法OTSU:THRESH_OTSU;三角形阈值法:THRESH_TRIANGLE)threshold(dst, dst1, 0, 255, THRESH_OTSU | type);imshow(result, dst1);
}

(THRESH_BINARY)

(THRESH_BINARY_INV)

(THRESH_TRUNC)

(THRESH_TOZERO )

(THRESH_TOZERO_INV)

【opencv】基本阈值操作相关推荐

  1. OpenCV 基本阈值操作Thresholding Operations

    OpenCV 基本阈值操作Thresholding Operations 基本阈值操作Thresholding Operations 目标 门槛? 阈值类型 阈值二进制 阈值二进制,反转 截短 阈值为 ...

  2. OpenCV中阈值操作

    阈值分割,顾名思义,就是对图像的像素点和选中的阈值进行比对的图像分割方法,在OpenCV 2.X中,Threshold()函数(基本阈值操作)和adaptiveThreshold()函数(自适应阈值操 ...

  3. 三天学会opencv(十三)——阈值操作

    基本阈值操作 主要内容 图像阈值 阈值类型 图像阈值(threshold) 阈值类型一阈值二值化(threshold binary) 图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值 我 ...

  4. 【OpenCv】阈值操作(超详细)

    一.阈值化操作 1.阈值滑动条: createTrackbar使用方法及步骤 第一个参数:conststring& trackbarname,表示轨迹条的名字 第二个参数:conststrin ...

  5. OpenCV 基本阈值操作

    文章目录 图像阈值 阈值是什么? 阈值类型 阈值二值化(threshold binary) 阈值反二值化(threshold binary Inverted) 截断 (truncate) 阈值取零 ( ...

  6. OpenCV 【十九】图像金字塔/基本的阈值操作/实现自己的线性滤波器

    目录 1.part one 图像金字塔 1.1原理 1.1.1图像金字塔 1.1.2高斯金字塔 1.2代码 1.3运行结果 2.part two 基本的阈值操作¶ 2.1原理 2.1.1阈值化的类型: ...

  7. OpenCV基本的阈值操作

    目的: 使用OpenCV 中的函数cv::threshold实现阈值操作 理论: 阈值? 1) 最简单的分割方法 2) 应用实例:从图像中分割出我们要分析的对象区域.这种分离基于对象的像素和背景像素之 ...

  8. OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作

    图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: blur GaussianBlur medianBlur bilateralFilter 原理 No ...

  9. OpenCV使用inRange的阈值操作Thresholding Operations

    OpenCV使用inRange的阈值操作Thresholding Operations 使用inRange的阈值操作 目标 理论 HSV色彩空间 代码 解释 结果 使用inRange的阈值操作 目标 ...

  10. 二值图像分析:OpenCV中的二值化阈值操作

    二值图像分析:OpenCV中的二值化阈值操作 1.二值图像的定义 2.OpenCV中的基本阈值操作 3.OTSU二值寻找算法 3.1 OTSU二值寻找算法介绍 3.2 OTSU二值寻找算法分析 3.2 ...

最新文章

  1. Middleware(中间件)
  2. 初学__Python——Python数据类型之文件
  3. Android开发入门一之Android应用程序架构详解
  4. 关于我的文章说明及联系方式
  5. iOS核心动画高级技术(九) 图层时间
  6. java酒店管理系统_酒店管理系统
  7. while 常见程序逻辑
  8. RabbitMQ~一些术语和最消息的生产
  9. VC CUtilityLZW 效率还行的LZW压缩算法,随机数加密
  10. 三极管NPN和PNP导通条件
  11. 深入理解二进制 算法必备底层知识
  12. PDFjs的使用说明书
  13. gdal+python计算NDVI
  14. text edit model FELIX的理解与python实现
  15. 常用的加密有哪些?在Java中如何实现?(MD5、AES、RSA)
  16. 院校情报福州大学计算机考研分析,福州大学情报学考研
  17. 大脑-计算机界面(bci,BrainOS人类大脑智能操作系统初步成果被展出
  18. 优雅地使用GEE绘制DEM
  19. 弹出窗口全攻略,代码,方法
  20. 网页中的th/th是什么意思

热门文章

  1. 在HTML中添加视频的代码
  2. 怎么把柱形图和折线图放在一起_EXCEL中统计图表怎么合并在一起?(如柱形图和折线图)...
  3. matlab n维插值,简单调研多维插值方法
  4. 联合体(union)的使用方法及其本质
  5. 图解算法:KMP算法
  6. _parameter;@param,refid是什么意思?
  7. UGP VR眼镜测评!测试一下可玩性如何!
  8. JVM —— Java 对象占用空间大小计算
  9. redis.set方法详解
  10. Visual Studio 历史简介