OpenCV-阈值函数cv::threshold

简介: OpenCV-阈值函数cv::threshold

函数原型

double threshold( InputArray src, OutputArray dst,
                  double thresh, double maxval, int type );


参数说明

InputArray类型的src,输入图像。

OutputArray类型的dst,输出图像。

double类型的thresh,阈值的具体值。

double类型的maxval,阈值最大值。

int类型的type,阈值操作的类型,0为THRESH_BINARY(标准的二值化阈值法,大于thresh的设为maxval,小于的设为0),1为THRESH_BINARY_INV(反向二值化),2为THRESH_TRUNC(截断阈值法,大于thresh的设为thresh,小于则不变),3为THRESH_TOZERO(零化阈值法,大于thresh的不变,小于则零化),4为THRESH_TOZERO_INV(反向零化),7为THRESH_MASK(没测试出来什么用法,都是黑屏),8为THRESH_OTSU(大津算法,适合双峰直方图的图像,通过分析最大的背景前景类间方差,自动调节阈值),16为THRESH_TRIANGLE(三角法,适合单峰直方图图像,建立谷底和峰顶直线,距离直线垂直距离最大的直方图位置,即阈值thresh)。

测试代码

#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
using namespace cv;
using namespace std;
int main()
{
  cv::Mat src = imread("test.jpg", 0);
  cv::Mat th1,th2,th3,th4,th5;
  // 最大类间差法,也称大津算法
  threshold(src, th1, 0, 255, THRESH_OTSU);
  // 常规阈值分割法
  threshold(src, th2, 100, 255, THRESH_BINARY);
  // 截断阈值分割法
  threshold(src, th3, 80, 255, THRESH_TRUNC);
  // 零化阈值分割法
  threshold(src, th4, 100, 255, THRESH_TOZERO);
  // 三角法
  threshold(src, th5, 0, 255, THRESH_TRIANGLE);
  imshow("original", src);
  imshow("otsu", th1);
  imshow("binary", th2);
  imshow("trunc", th3);
  imshow("zero", th4);
  imshow("triangle", th5);
  waitKey(0);
  return 0;
}

测试效果

图1 灰度图

图2 大津算法效果图

图4 截断阈值分割法效果图

图5 零化阈值分割法效果图

图6 三角法效果图

图3 常规阈值分割法效果图

      一般来说,opencv提供的阈值函数可以适用大多数场景,针对特殊场景,可以根据自身需求自行设计阈值算法。另外,大津算法针对图像灰度接近的场景挺有效的,用其他算法可能无法精确分离;三角法在图像对比度较大的场景比较好用,可以较好地识别出目标区域,但是这个区域可能偏大些,一般配合边缘渐变算法使边缘平滑过渡~


      如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

相关文章
|
4月前
|
算法 计算机视觉
Opencv学习笔记(六):cv2.resize函数的介绍
这篇文章介绍了OpenCV库中cv2.resize函数的使用方法,包括其参数、插值方式选择以及实际代码示例。
782 1
Opencv学习笔记(六):cv2.resize函数的介绍
|
4月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
1008 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
7月前
|
机器学习/深度学习 人工智能 算法
Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。
【7月更文挑战第5天】Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。CV涉及图像处理、模式识别和机器学习,用于图像理解和生成。Python的跨平台特性和活跃社区使其成为CV的理想工具。基本流程包括图像获取、预处理、特征提取、分类识别及图像生成。例如,面部识别通过预处理图像,使用如`cv2.CascadeClassifier`进行检测;物体检测类似,但需适应不同目标;图像生成则利用GAN创造新图像。
93 4
|
6月前
|
计算机视觉 索引
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
本文介绍了解决OpenCV读取视频失败的错误,指出问题通常由视频路径错误或摄像头索引错误导致,并提供了相应的解决方法。
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
|
6月前
|
计算机视觉
OpenCV滑动条(createTrackbar()函数)如何在多个维度进行同步调整?
这篇文章介绍了如何在OpenCV中使用`createTrackbar()`函数创建多个滑动条以同步调整图像的多个维度(如亮度和对比度),通过将不同滑动条的回调函数合并为一个,确保它们在同一图像基础上进行调整。
|
6月前
|
计算机视觉
OpenCV 图像类型标识符 CV_<bit_depth><S|U|F>C<number_of_channels>
OpenCV 图像类型标识符 CV_<bit_depth><S|U|F>C<number_of_channels>
60 0
|
7月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
8月前
|
算法 计算机视觉
【Qt&OpenCV 图像阈值操作 threshold】
【Qt&OpenCV 图像阈值操作 threshold】
91 0
|
5月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
82 4
|
5月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制

热门文章

最新文章