【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))

目录

  • 一、阈值(thresh)的概念
  • 二、阈值在图形学中的用途
  • 三、阈值的作用和操作
    • 3.1 在OpenCV中可以进行的阈值操作
    • 3.2 操作实例
      • 3.2.1 threshold()函数介绍
      • 3.2.2 实例
      • 3.2.3 结果


上节课的内容(作者还是鼓励各位同学按照顺序进行学习哦):【C++的OpenCV】第八课-OpenCV图像常用操作(五):图像形态学-图像金字塔(Gaussian pyramid、Laplacian pyramid)和向上(下)采样的使用和原理


一、阈值(thresh)的概念

  • 首先,顾名思义,“”就是范围或者限制,所以,“阈值”就是某个限制的值(该值具有一定的数学含义,即“临界值”,例如车辆限高杆的高度就是一种阈值,不可超越;亦或者1.1米以下儿童不收费,超过1.1就要收费。)
    【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第1张图片
  • 其次,图形学中的阈值,往往指某个你想要设置的像素值。

二、阈值在图形学中的用途

        图像阈值进程被用于图像分离领域,根据某个确定的阈值,将图像进行分离,从而得到感兴趣的区域。
【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第2张图片

        当然基于这个思想,还可以应用于更深更高的领域,例如医学图像分析等领域。总之,其应用价值非常高。就像前一章的内容一样。


三、阈值的作用和操作

3.1 在OpenCV中可以进行的阈值操作

        我们接下来用图像和函数公式来尽可能的表达其原理和功能。
        注意,以下的图像中,红色实线为设置的阈值!

  • 二进制模式

    • 模式介绍:
      在这里插入图片描述
    • 解释:
              当源图像的像素值大于阈值时,处理后的图像中这些像素点均取最新设置的最大值像素作为结果,如果源图像的像素值小于或者等于阈值,则结果图像中的该像素值为0。
    • 图示:
      • 处理前像素值数据:
        【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第3张图片

      • 处理后像素值数据:
        【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第4张图片

  • 二进制倒置

    • 模式介绍:
      在这里插入图片描述
    • 解释:
              和像素二进制模式完全相反即可! 即:当源图像的像素值大于阈值时,结果图像对应的像素值为0,当源图像的像素值小于等于阈值时,结果图像对应的阈值取提前设置好的MaxValue(最大值)。
    • 图示:
      • 处理前像素值数据:
        【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第5张图片
      • 处理后像素值数据:
        【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第6张图片
  • 阈值截短

    • 解释:
              即一句话,把所有高于阈值的像素点的值都设置为等于阈值,其余像素值不变
    • 图示:
      • 处理前的图像数据:
        【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第7张图片
      • 处理后的图像数据:
        【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第8张图片
  • 零阈值

    • 模式介绍:
      在这里插入图片描述

    • 解释:
              源图像中低于或者等于阈值的像素被设置为0

    • 图示:

      • 处理前的图像数据:
        【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第9张图片
      • 处理后的图像数据:
        【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第10张图片
  • 零阈值倒置

    • 模式介绍:
      在这里插入图片描述
    • 解释:将上边0阈值的数据反过来即可,即:当源图像像素值大于阈值时,生成的图片对应像素位置的值为0;反之,保留原像素值。
    • 图示:
      • 处理前图像的数据:
        【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第11张图片
      • 处理后图像的数据:
        【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第12张图片

3.2 操作实例

3.2.1 threshold()函数介绍

  • 函数原型:
double cv::threshold(
						InputArray src,
						OutputArray dst,
						double 	thresh,
						double 	maxval,
						int 	type 
					)	
  • 参数解释:
    • src : 原始图像
    • dst:处理后的图像
    • thresh:阈值
    • maxval:像素最大值,即上文中提到的MaxValue
    • type:阈值处理的方式,在这里,上文中提到的几种阈值模式由以下整数对应:
      • 0: Binary ,二进制模式
      • 1: Binary Inverted,二进制倒置
      • 2: Threshold Truncated,阈值截短
      • 3: Threshold to Zero,零阈值
      • 4: Threshold to Zero Inverted,零阈值倒置

3.2.2 实例

参考源代码:示例源码

#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;

int main(void)
{
    Mat srcImg = imread("/home/aelx-chen/demo.jpg");
    Mat grayImg;
    Mat dstImg;
    cvtColor(srcImg, grayImg, COLOR_BGR2GRAY);

    threshold(grayImg, dstImg, 90, 255, 1);
    /*
        将原图像,设置阈值为90,最大阈值为255,采用二进制方式处理
    */

    imshow("source image",srcImg);
    imshow("gray image",grayImg);
    imshow("destination image",dstImg);
    waitKey(0);
    return 0;
}

3.2.3 结果

【C++的OpenCV】第九课-OpenCV图像常用操作(六):图像形态学-阈值的概念、功能及操作(threshold()函数))_第13张图片

你可能感兴趣的:(openCV,opencv,计算机视觉,c++)