目的:

使用OpenCV 中的函数cv::threshold实现阈值操作

理论:

阈值?
1) 最简单的分割方法
2) 应用实例:从图像中分割出我们要分析的对象区域。这种分离基于对象的像素和背景像素之间的强度的变化实现。
3) 为了区分我们感兴趣的像素(which will eventually be rejected),我们将用每一个像素的值和threshold比较(依据要解决的问题确定)。
4) 一旦我们正确的分离出重要的像素,我们可以将这些像素的值设置成一个确定的值来确定它们(例如,可以用0表示黑色,255表示白色或任何你需要的值)。

阈值的类型

1) 基于OpenCV中的函数cv::threshold可以进行5中阈值类型。

2) 为了说明阈值操作如何工作, 考虑我们有一个原图,图像像素的灰度值为 src(x,y). 如下图描绘蓝色的水平线表示阈值 thresh (固定值).

阈值二值化

这个阈值操作可以表示为:

如果src(x,y)的像素值大于thresh,像素值将被设置成MaxVal.反之设置成0.

反向阈值二值化

这个阈值操作可以表示为:

如果src(x,y)的像素值大于thresh,像素值将被设置成0.反之设置成MaxVal.

截断

这个阈值操作可以表示为:

图像最大的像素值为thresh,如果src(x,y)的像素值大于阈值,像素值将会被截断为阈值.如下图所示:

低于阈值零化

这个阈值操作可以表示为:

如果src(x,y)的像素值低于thresh,像素的值将会被设置成0.


反向低于阈值零化

这个阈值操作可以表示为:

如果src(x,y)的像素值大于thresh,像素的值会设置成0.

/**
* @file Threshold.cpp
* @brief Sample code that shows how to use the diverse threshold options offered by OpenCV
* @author OpenCV team
*/#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"using namespace cv;/// Global variablesint threshold_value = 0;
int threshold_type = 3;
int const max_value = 255;
int const max_type = 4;
int const max_BINARY_value = 255;Mat src, src_gray, dst;
const char* window_name = "Threshold Demo";const char* trackbar_type = "Type: \n 0: Binary \n 1: Binary Inverted \n 2: Truncate \n 3: To Zero \n 4: To Zero Inverted";
const char* trackbar_value = "Value";/// Function headers
void Threshold_Demo( int, void* );/**
* @function main
*/
int main( int, char** argv )
{//! [load]src = imread( argv[1], IMREAD_COLOR ); // Load an imageif( src.empty() )  return -1;cvtColor( src, src_gray, COLOR_BGR2GRAY ); // Convert the image to Gray//! [load]//! [window]namedWindow( window_name, WINDOW_AUTOSIZE ); // Create a window to display results//! [window]//! [trackbar]createTrackbar( trackbar_type,window_name, &threshold_type,max_type, Threshold_Demo ); // Create Trackbar to choose type of ThresholdcreateTrackbar( trackbar_value,window_name, &threshold_value,max_value, Threshold_Demo ); // Create Trackbar to choose Threshold value//! [trackbar]Threshold_Demo( 0, 0 ); // Call the function to initialize/// Wait until user finishes programfor(;;){int c;c = waitKey( 20 );if( (char)c == 27 ) break;}}//![Threshold_Demo]
/**
* @function Threshold_Demo
*/
void Threshold_Demo( int, void* )
{/* 0: Binary1: Binary Inverted2: Threshold Truncated3: Threshold to Zero4: Threshold to Zero Inverted*/threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );imshow( window_name, dst );
}
//![Threshold_Demo]

结果

1)原图

2)对原图像使用反向阈值二值化。图像中doggie的舌头和眼睛比较亮,像素值大于阈值所以显示成黑色。sh

3)使用低于阈值零化操作。低于阈值的像素将会变成全黑,大于阈值的像素不变。如下图所示:

OpenCV基本的阈值操作相关推荐

  1. C/C++ OpenCV图像的阈值操作

    固定阈值操作:Threshold() double threshold( inputArray src, outPutArray dst, double thresh, double maxval, ...

  2. 【opencv】基本阈值操作

    阈值化(Threshold) 阈值化,即图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果.即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图 ...

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

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

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

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

  5. OpenCV中阈值操作

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

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

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

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

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

  8. OpenCV 基本阈值操作Thresholding Operations

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

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

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

最新文章

  1. LeetCode简单题之七进制数
  2. 过桥问题c语言程序,盏灯过桥游戏
  3. trimmomatic对fastq质控
  4. LRU(Least Recently Used)算法的理解
  5. 外媒:苹果正研发新的Apple Watch机型 显示屏和速度将升级
  6. fetch与XHR的区别与优势
  7. 整理一下Entity Framework的查询
  8. sqlitepython导入数据_Python导入excel数据到sqlite;
  9. bt种子php啥格式的,bt种子是什么意思(bt种子的格式及文件结构)
  10. linux用在炫龙m7,NH55 炫龙M7 Ubuntu 安装
  11. SIPp 安装及使用
  12. 视频编码中的PAFF和MBAFF的区别
  13. 【ERROR】Unable to open underlying table which is differently defined or of non-MyISAM type or ...
  14. 计算机用户删除文件找回,电脑删除的文件怎么找回?失易得数据恢复帮助找回...
  15. 在linux服务器上安装git
  16. Ubuntu 20.04 server 安装
  17. 纵断面图标注栏数据复制
  18. lims 系统 服务器 强大,实验室信息管理系统(LIMS)详解
  19. 乙方视角看中台?《中台实践》首屈一指
  20. 中南大学电子信息 单片机_沙漠老师讲专业系列三:电子信息类相关专业解读(1)...

热门文章

  1. mybatis 配置
  2. k8s中service类型
  3. OVS对VXLAN报文解封包
  4. android studio3.0升级,升级androidStudio3.0的问题
  5. gpu装linux系统显示黑屏,linux操作系统安装gpu版本的paddlepaddle出现问题
  6. MySQL B+树索引和哈希索引的区别
  7. 新零售模式开启,2018杭州无人店展览会
  8. Python笔记总结(1)
  9. Android渲染机制和丢帧分析
  10. 把《c++ primer》读薄(4-2 c和c++的数组 和 指针初探)