zoukankan      html  css  js  c++  java
  • 2.5基本的阈值操作

    阈值

    函数 createTrackbar()

    函数 threshold()

    最简单的图像分割算法

    应用举例:从一副图像中分离出我们需要的物体部分。这样的图像分割算法是基于图像中物体与

    背景之间的灰度差异,而且,此分割属于像素级的分割。

    为了从一副图像中提取出我们需要的部分,应该利用图像中每一个像素点的灰度值与选区的阈值进行比较,

    做出相应判断。

    一旦找到了需要分割物体的像素点,我们可以对这些像素点设定一些特定的值来表示(例如可以将物体的

    像素点设置为0(黑色),其他像素点设置为25(白色))

    阈值化的类型

    OpenCV提供了阈值函数:threshold。

    这个函数有5种阈值化类型。

    为了了解阈值分割的过程,看一个简单有关像素灰度的图片。蓝色水平线代表一个具体的阈值。

    二进制阈值化

    dst(x,y)=maxVal       if src(x,y)>thresh

                 0                 otherwise

    运用该阈值时,先设定一个特定的阈值量,比如:125,大于125的像素点设置为最大值,小于

    125的像素点设置为最小值。

    反二进制阈值化

    dst(x,y)=0                  if src(x,y)>thresh

                  maxVal        otherwise

    与二进制阈值化相似,不过结果设定相反。

    截断阈值化

    dst(x,y)=threshold   if src(x,y)>thresh

                  src(x,y)       otherwise

    首先选定一个阈值,图像中大于该阈值的像素点倍设置为该阈值,小于该阈值的保持不变。

    阈值化为0

    dst(x,y)=src(x,y)      if src(x,y)>thresh

                  0                otherwise

    先设定一个阈值,对图像做如下处理,1.像素点的灰度值大于该阈值点的不做任何改变,

    像素点的灰度值小于该阈值的,其灰度值全变为0。

    反阈值化为0

    dst(x,y)=0            if src(xy)>thresh

                  src(x,y)  otherwise

    先设定一个阈值,对图像做如下处理,1.像素点的灰度值大于该阈值点的变为0,

    2.像素点的灰度值小于该阈值的,不做任何改变

    #include <opencv2/opencv.hpp>
    #include <iostream>
    #include<windows.h>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    using namespace cv;
    
    //全局变量定义及赋值
    
    int threshold_value = 0;
    int threshold_type = 1;
    int const max_value = 255;
    int const max_type = 4;
    int const max_BINARY_value = 255;
    
    Mat src, src_gray, dst;
    char* window_name = (char* )"Threshold Demo";
    char* trackbar_type =(char* ) "Type:
     0: Binary 
     1:Binary Inverted 
     2:Truncate 
     3:To Zero
     4:To Zero Inverted";
    char* trackbar_value = (char*)"Value";
    //自定义函数声明
    void Threshold_Demo(int, void*);
    
    
    
    int main()
    {
        src = imread("D:\Pic\4141.jpg");  //存放自己图像的路径 
        if (!src.data) {
            printf("No data! --Exiting the program
    ");
            return -1;
        }
        //将图片转换称灰度图片
        cvtColor(src, src_gray, CV_RGB2GRAY);
    
        //创建一个窗口显示图片
        namedWindow(window_name, CV_WINDOW_AUTOSIZE);
    
        //创建滑动条来控制阈值
        createTrackbar(trackbar_type,
            window_name,
            &threshold_type,
            max_type,
            Threshold_Demo);
    
        createTrackbar(trackbar_value,
            window_name,
            &threshold_type,
            max_value,
            Threshold_Demo);
    
        //初始化自定义的阈值函数
        Threshold_Demo(0, 0);
        
        //等待用户按键,如果是ESC则退出等待过程
        while (true) {
            int c;
            c = waitKey(20);
            if ((char)c == 20) {
                break;
            }
        }
        system("pause");
        return 0;
    }
    
    //自定义的阈值函数
    void Threshold_Demo(int, void*) {
        /*
        0:二进制阈值,
        1:反二进制阈值,
        2:截断阈值,
        3:0阈值,
        4:反0阈值
        */
        threshold(src_gray, dst,threshold_value, max_BINARY_value, threshold_type);
        imshow(window_name, dst);
    }
  • 相关阅读:
    CentOS下使用Jexus部署.NetFramework站点 (二)
    CentOS下使用Jexus部署.NetFramework站点 (一)
    RDLC报表纵向合并单元格。
    Access to the path '' is denied.解决方案
    7_文件上传.md
    python接口自动化unittest+HTMLrunner
    pytest命令行执行
    python+requests接口自动化测试框架实例详解教程123
    python+requests接口自动化测试框架实例详解教程
    python进行接口请求,第一个接口返回的数据作为第二个参数的入参
  • 原文地址:https://www.cnblogs.com/zuoyou151/p/9721593.html
Copyright © 2011-2022 走看看