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


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

相关文章
|
3月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.8、threshold阈值0-4效果对照图
OpenCV这么简单为啥不学——1.8、threshold阈值0-4效果对照图
36 0
|
3月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
47 0
|
3月前
|
人工智能 Linux API
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
48 0
|
13天前
|
计算机视觉
OpenCV报错: cv::Exception,位于内存位置 0x00000078226FEE58 处。
OpenCV报错: cv::Exception,位于内存位置 0x00000078226FEE58 处。
|
3月前
|
监控 算法 Serverless
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
50 0
|
3月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.6、图像旋转与翻转(rotate函数、imutils环境安装、imutils任意角度旋转)
OpenCV这么简单为啥不学——1.6、图像旋转与翻转(rotate函数、imutils环境安装、imutils任意角度旋转)
35 0
|
3月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
32 0
|
11天前
|
计算机视觉 Python
轻松掌握opencv的8种图像变换
轻松掌握opencv的8种图像变换
|
13天前
|
算法 计算机视觉
【OpenCV】- 图像修复
【OpenCV】- 图像修复
|
13天前
|
Serverless 计算机视觉
【OpenCV】-图像的矩
【OpenCV】-图像的矩