Opencv3笔记15——阈值化

7 阈值化

对图像中的像素做出取舍和决策,阈值可以作为简单的图像分割方法。

7.1 Threshold()函数

函数原型

double threshold(InputArray src, OutputArray dst,double thresh, double maxval,int type)
  • 第四个参数:double 类型的maxval,当第五个参数阈值类型type取CV_THRESH_BINARY(最大值)
  • 第五个参数 Opencv3笔记15——阈值化_第1张图片
    Opencv3笔记15——阈值化_第2张图片

7.2 自适应阈值操作:adaptiveThreshold()函数

void adaptiveThreshold(InputArray src, OutputArray dst,double maxval,int adaptiveMethod,int thresholdType,int blockSize,double c)

Opencv3笔记15——阈值化_第3张图片
Opencv3笔记15——阈值化_第4张图片

7.3 综合示例

//头文件和命名空间
#include 
#include 
#include 

using namespace std;
using namespace cv;

//宏定义
#define WINDOW_NAME "【程序窗口】"

//全局变量
int g_nThresholdValue = 100;
int g_nTHresholdType = 3;
Mat g_srcImage, g_grayImage, g_dstImage;

void on_Threshold(int, void *);

// main函数
int main()
{
    // 读入图片
    g_srcImage = imread("1.jpg");
    if (!g_srcImage.data)
    {
        printf("读取图片错误,请确定目录是否有imread函数指定的图像存在~!\n");
        return false;
    }
    cvtColor(g_srcImage, g_grayImage, COLOR_BGR2GRAY);
    namedWindow(WINDOW_NAME, WINDOW_AUTOSIZE);
    //创建轨迹条
    createTrackbar("模式", WINDOW_NAME, &g_nTHresholdType, 4, on_Threshold);
    createTrackbar("参数值", WINDOW_NAME, &g_nThresholdValue, 255, on_Threshold);

    //初始化自定义的阈值回调函数
    on_Threshold(0, 0);

    //等待用户按键
    while (1)
    {
        int key;
        key = waitKey(20);
        if ((char)key == 27) break;
    }
    return 0;
}

void on_Threshold(int, void *)
{
    //调用阈值函数
    threshold(g_grayImage, g_dstImage, g_nThresholdValue, 255, g_nTHresholdType);
    imshow(WINDOW_NAME, g_dstImage);
}

Opencv3笔记15——阈值化_第5张图片

Opencv3笔记15——阈值化_第6张图片
Opencv3笔记15——阈值化_第7张图片
Opencv3笔记15——阈值化_第8张图片
Opencv3笔记15——阈值化_第9张图片
Opencv3笔记15——阈值化_第10张图片

你可能感兴趣的:(Opencv,机器视觉)