opencv 图像阈值 二值化处理

文章目录

  • opencv 图像阈值 二值化处理
    • 图像阈值
    • threshold 函数
    • 阈值类型
    • 图解
    • DEMO
    • 效果

图像阈值

设定一个阈值,将图片数据大于这个阈值和小于这个阈值的部分区分开来,常用的二值化处理就是将大于阈值的设置为255,小于阈值的设置为0。二值化处理目前只支持8位单通道图像。
也可以用于消除噪声(即滤除过小或过大的像素)。

threshold 函数

CV_EXPORTS_W double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type );@param src          //输入数组(多通道,8位或32位浮点数)。
@param dst             //具有与src相同大小和类型以及相同通道数的输出数组。
@param thresh      //阈值。
@param maxval      //与#THRESH_BINARY和#THRESH_BINARY_INV阈值类型一起使用的最大值。
@param type            //阈值类型(请参阅#ThresholdTypes)。
@return                //如果使用了Otsu或Triangle方法,则计算出的阈值。

阈值类型

enum ThresholdTypes {THRESH_BINARY     = 0, //!< \f[\texttt{dst} (x,y) =  \fork{\texttt{maxval}}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{0}{otherwise}\f]THRESH_BINARY_INV = 1, //!< \f[\texttt{dst} (x,y) =  \fork{0}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{\texttt{maxval}}{otherwise}\f]THRESH_TRUNC      = 2, //!< \f[\texttt{dst} (x,y) =  \fork{\texttt{threshold}}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{\texttt{src}(x,y)}{otherwise}\f]THRESH_TOZERO     = 3, //!< \f[\texttt{dst} (x,y) =  \fork{\texttt{src}(x,y)}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{0}{otherwise}\f]THRESH_TOZERO_INV = 4, //!< \f[\texttt{dst} (x,y) =  \fork{0}{if \(\texttt{src}(x,y) > \texttt{thresh}\)}{\texttt{src}(x,y)}{otherwise}\f]THRESH_MASK       = 7,THRESH_OTSU       = 8, //!< flag, use Otsu algorithm to choose the optimal threshold valueTHRESH_TRIANGLE   = 16 //!< flag, use Triangle algorithm to choose the optimal threshold value
};

图解

蓝色为原始数据值,红色为阈值

  1. THRESH_BINARY 大于阈值的部分被置为255,小于部分被置为0
  2. THRESH_BINARY_INV 大于阈值部分被置为0,小于部分被置为255
  3. THRESH_TRUNC 大于阈值部分被置为threshold,小于部分保持原样
  4. THRESH_TOZERO 小于阈值部分被置为0,大于部分保持不变
  5. THRESH_TOZERO_INV 大于阈值部分被置为0,小于部分保持不变

DEMO

int main() {cv::namedWindow("src",0);cv::namedWindow("dst", 0);cv::Mat src(255, 500, CV_8UC1, cv::Scalar(0));for (int i = 0; i < src.rows; ++i) {for (int j = 0; j < src.cols; ++j){src.at<unsigned char>(i, j) = i;}}cv::imshow("src", src);cv::imwrite("./src.jpg", src);cv::Mat dst;double r = cv::threshold(src, dst, 128, 255, cv::THRESH_BINARY);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_BINARY.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_BINARY_INV);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_BINARY_INV.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_TRUNC);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_TRUNC.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_TOZERO);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_TOZERO.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_TOZERO_INV);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_TOZERO_INV.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_OTSU);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_OTSU.jpg", dst);cv::waitKey(0);r = cv::threshold(src, dst, 128, 255, cv::THRESH_TRIANGLE);cv::imshow("dst", dst);cv::imwrite("./dst_THRESH_TRIANGLE.jpg", dst);cv::waitKey(0);}

效果

  1. src原图

  2. THRESH_BINARY 大于阈值的部分被置为255,小于部分被置为0

  3. THRESH_BINARY_INV 大于阈值部分被置为0,小于部分被置为255

  4. THRESH_TRUNC 大于阈值部分被置为threshold,小于部分保持原样

  5. THRESH_TOZERO 小于阈值部分被置为0,大于部分保持不变

  6. THRESH_TOZERO_INV 大于阈值部分被置为0,小于部分保持不变

  7. THRESH_OTSU 二值化的一个很优的算法Otsu大津算法

  8. THRESH_TRIANGLE

opencv 图像阈值 二值化处理相关推荐

  1. OpenCV.反阈值二值化

    反阈值二值化 反阈值二值化与阈值二值化互为逆操作.在OpenCV中该类的实现依赖于threshold() 函数.下面是该函数的声明: threshold(src, dst, thresh, maxva ...

  2. python-opencv 图像阈值二值化

    本文讲解基于OpenCV-python的图像二值化API及浅显原理讲解 文章目录 一. 阈值 1. 简单阈值 2. 自适应阈值 二. 图像二值化 1. 全局图像二值化 2. 局部图像二值化 3. Ot ...

  3. 利用python opencv实现图像自适应二值化

    对灰度图像利用阈值得到一个二值化的图像,是常最常用的图像处理技术之一.例如,灰度大于127的图像设置为1.小于127的设置为0,这种处理便是固定阈值127的二值化处理. 自适应的二值化处理不同于固定阈 ...

  4. 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))

    目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...

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

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

  6. 【OpenCV图像处理】二、图像的二值化操作

    图像的逻辑运算就是将两幅图像的对应像素进行逻辑运算.逻辑运算主要包括 与(AND)或(OR)及补运算.要对灰度图像进行逻辑运算,就要首先对图像进行二值化处理. 二值化的公式如下: 我们对灰度图像进行二 ...

  7. 图像的二值化之python+opencv

    定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果. 一幅图像包括目标物体.背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用 ...

  8. java 图像二值化阀值,阈值 二值化图像程序

    在Matlab中将一幅图像阈值分割二值化非常简单,若需要通过阈值th2二值化保留一些大面积的.且有灰度值含有大于th1的点的前景区域,而不需要小面积的区域(th1大于th2),这时会遇到这样的问题:当 ...

  9. AR学习笔记(七):阈值二值化优化与颜色分割的优化

    AR学习笔记(七):阈值二值化优化与颜色分割的优化 阈值二值化的优化 当前方案 图像预处理 阈值二值化 优化方案 otsu法 顶帽变换 分块阈值法 颜色分割的优化 当前方案 优化方案 HSV模型分割 ...

  10. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果

    十三种基于直方图的图像全局二值化算法实现 1. 什么是基于直方图的图像全局二值化算法 2. 灰度平均值 3. 百分比阈值(P-Tile法) 3. 基于双峰的阈值 3.1 基于平均值的阈值 3.2 基于 ...

最新文章

  1. 程序员哀叹外国同事对35岁现象感到震惊,在国外40岁还写代码
  2. 微信小程序拼团后端接口设计规范
  3. XPath学习:轴(13)——namespace
  4. python 断点重传_性能调优-python SDK 调优
  5. redis(17)--集群
  6. VC程序在没装VC的机器中运行
  7. Python 数据结构之栈的实现
  8. vip会员管理系统c语言,路西牌会员管理系统。
  9. ThinkPHP6项目基操(17.实战部分 Filesystem文件上传)
  10. cisco3550交换机限速配置
  11. cart算法_机器学习十大算法之一——决策树CART算法
  12. docker search
  13. 【深度学习】深度学习入门——BP网络反向传播
  14. 《精通ArcGIS Server 应用与开发》——2.4 ArcGIS Server的安装与配置
  15. 大数据平台与传统数仓的区别
  16. 全网最最最详细的软件著作权申请步骤
  17. 【Mac小技巧】如何更改默认浏览器
  18. 冰桶挑战,正在朝功利化和畸形化方向“扩散”
  19. linux进行挂载Nas存储
  20. 为什么app会被常常攻击?如何预防攻击?

热门文章

  1. vue中使用video-player和百度地图
  2. 博弈论基础知识与SG函数
  3. Springboot+ssm高校会议预约系统javaweb
  4. 录制GIF动画 MAC
  5. android webview输入框_Android WebView 软键盘挡住输入框
  6. cmd命令提示符配置切换IP地址
  7. C++ Interesting卡常数
  8. 盘点 常见MQ : 消息队列总览
  9. CAD系统与PDM系统集成技术研究
  10. 网狐荣耀微星棋牌系列搭建教程