OpenCV基本的阈值操作
目的:
使用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基本的阈值操作相关推荐
- C/C++ OpenCV图像的阈值操作
固定阈值操作:Threshold() double threshold( inputArray src, outPutArray dst, double thresh, double maxval, ...
- 【opencv】基本阈值操作
阈值化(Threshold) 阈值化,即图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果.即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图 ...
- OpenCV 【十九】图像金字塔/基本的阈值操作/实现自己的线性滤波器
目录 1.part one 图像金字塔 1.1原理 1.1.1图像金字塔 1.1.2高斯金字塔 1.2代码 1.3运行结果 2.part two 基本的阈值操作¶ 2.1原理 2.1.1阈值化的类型: ...
- OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作
图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: blur GaussianBlur medianBlur bilateralFilter 原理 No ...
- OpenCV中阈值操作
阈值分割,顾名思义,就是对图像的像素点和选中的阈值进行比对的图像分割方法,在OpenCV 2.X中,Threshold()函数(基本阈值操作)和adaptiveThreshold()函数(自适应阈值操 ...
- OpenCV使用inRange的阈值操作Thresholding Operations
OpenCV使用inRange的阈值操作Thresholding Operations 使用inRange的阈值操作 目标 理论 HSV色彩空间 代码 解释 结果 使用inRange的阈值操作 目标 ...
- 二值图像分析:OpenCV中的二值化阈值操作
二值图像分析:OpenCV中的二值化阈值操作 1.二值图像的定义 2.OpenCV中的基本阈值操作 3.OTSU二值寻找算法 3.1 OTSU二值寻找算法介绍 3.2 OTSU二值寻找算法分析 3.2 ...
- OpenCV 基本阈值操作Thresholding Operations
OpenCV 基本阈值操作Thresholding Operations 基本阈值操作Thresholding Operations 目标 门槛? 阈值类型 阈值二进制 阈值二进制,反转 截短 阈值为 ...
- 三天学会opencv(十三)——阈值操作
基本阈值操作 主要内容 图像阈值 阈值类型 图像阈值(threshold) 阈值类型一阈值二值化(threshold binary) 图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值 我 ...
最新文章
- LeetCode简单题之七进制数
- 过桥问题c语言程序,盏灯过桥游戏
- trimmomatic对fastq质控
- LRU(Least Recently Used)算法的理解
- 外媒:苹果正研发新的Apple Watch机型 显示屏和速度将升级
- fetch与XHR的区别与优势
- 整理一下Entity Framework的查询
- sqlitepython导入数据_Python导入excel数据到sqlite;
- bt种子php啥格式的,bt种子是什么意思(bt种子的格式及文件结构)
- linux用在炫龙m7,NH55 炫龙M7 Ubuntu 安装
- SIPp 安装及使用
- 视频编码中的PAFF和MBAFF的区别
- 【ERROR】Unable to open underlying table which is differently defined or of non-MyISAM type or ...
- 计算机用户删除文件找回,电脑删除的文件怎么找回?失易得数据恢复帮助找回...
- 在linux服务器上安装git
- Ubuntu 20.04 server 安装
- 纵断面图标注栏数据复制
- lims 系统 服务器 强大,实验室信息管理系统(LIMS)详解
- 乙方视角看中台?《中台实践》首屈一指
- 中南大学电子信息 单片机_沙漠老师讲专业系列三:电子信息类相关专业解读(1)...