阈值二值化(threshold binary)

这里写图片描述
蓝色线对应值为选定的阈值。所有像素值小于这一值的设定为0,否则设定为最大值1。


阈值反二值化(threshold binary inverted)

这里写图片描述
蓝色线对应值为选定的阈值。所有像素值小于这一值的设定为1,否则设定为最小值0。


截断(truncate)

这里写图片描述
像素值大于阈值的就设定为阈值大小,否则保持不变。


阈值取零(threshold to zero)

这里写图片描述
像素值小于阈值的全部设为0,大于的保持不变。


阈值反取零(threshold to zero inverted)

这里写图片描述
像素值大于阈值的全部设为0,小于的保持不变。


OpenCV提供的阈值操作

提供API:

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

实例代码:

#include "opencv2/opencv.hpp"
#include "iostream"

using namespace cv;
using namespace std;

int value = 127;//选定的阈值
int maxValue = 255;//像素最大值
int type=0;
int maxType=4;
char *outPut = "阈值化";
Mat src,dest,gray;

void CallBackFun2(int,void*);

void ThresholdOper(){
    src = imread("lena.jpg");
    if(!src.data){
        cout << "图像打开失败!" << endl;
        return ;
    }
    namedWindow("原图",CV_WINDOW_AUTOSIZE);
    imshow("原图",src);
    namedWindow(outPut,CV_WINDOW_AUTOSIZE);

    createTrackbar("value",outPut,&value,maxValue,CallBackFun2);
    createTrackbar("type",outPut,&type,maxType,CallBackFun2);
    CallBackFun2(0,0);

    cvWaitKey();
}

void CallBackFun2(int,void*){
    cvtColor(src,gray,CV_RGB2GRAY);
    /*
    double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
    thresh – 选定阈值.
    maxval – maximum value to use with the THRESH_BINARY and THRESH_BINARY_INV thresholding types.
    type
            THRESH_BINARY

            THRESH_BINARY_INV

            THRESH_TRUNC

            THRESH_TOZERO

            THRESH_TOZERO_INV
    */
    threshold(gray,dest,value,maxValue,type);

    imshow(outPut,dest);
    return ;
}

int main(){
    ThresholdOper();
    return 0;
}

这里写图片描述

对于阈值的选定我们可以自己指定也可以让程序自己计算,使用参数:THRESH_OTSU .

threshold(gray,dest,value,maxValue,THRESH_OTSU | type);

使用程序计算的阈值后即使我们拖动滑动条也无法改变阈值。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐